C#:将对象序列化为 XML,无需反射

J4N*_*J4N 2 c# xml linq reflection serialization

在应用程序中,我们可以保存应用程序的当前状态及其配置(可能很大)。我们正在使用XmlSerializer.

我们现在只有 XML 中需要的内容(所有 XmlIgnore 都已就位),并且存储整个配置(约 50-100MB 的文件)非常慢。

我们需要继续将此配置存储为 XML,但我们希望避免:

  • 反射,这是减慢
  • 实现IXmlSerializable接口

我们的想法是在每个对象中实现一个方法,我们可以在其中注册我们想要序列化的字段/属性,然后有一个SerializationManager能够读取我们想要序列化的内容,然后写入它们。

像这样,对象不知道它们将被呈现的语言 (XML),如果有一天我们想要二进制序列化(或者如果我们想要以不同格式序列化的可能性),我们可以。

但是我们不想重新发明轮子,我不知道是否存在某个库,或者诸如 Linq to xml 之类的东西是否可以提供帮助,或者这本身是否可行,...

那么你认为我如何才能做到这一点?

Mar*_*ell 5

“反射,这是要慢”

除此之外,它在运行时不使用反射。它在第一次运行时执行元编程(假设您正在使用new XmlSerializer(type))来检查类型并生成适用于给定类型的静态代码。因此,任何与音量相关的性能问题都与反射无关。这里一个机会,元编程本身可以采取可测量的时间,但一个:这是不可能的,除非你的模型确实复杂,和b:它可以通过使用来避免sgen.exe工具来组装预先生成的序列化。

因此,任何性能问题很可能是由于模型的大小和 xml 的开销造成的。

如果您想尝试不同的序列化程序,请考虑使用 protobuf-net 之类的东西。您将无法读取数据(它不会是 xml),但输出会更小更快。