查看私有数据的序列化程序具有可分析的输出,支持泛型集合,并支持自定义序列化

时间:2010-09-15 16:41:42

标签: .net xml serialization xml-serialization

我需要一种非常特殊的.NET序列化器。

我的要求:

  1. 不应跳过私人数据
  2. 输出应该是人类可读的(或至少可以轻松解析),最好是XML
  3. 应该支持通用集合(不需要容易,但应该可以)
  4. 应支持针对特定类的自定义实现的序列化。
  5. 我需要(2)我精心设计的版本容忍方案和(4)因为我需要为需要序列化的巨大对象(数组)实现自定义优化序列化。

    XmlSerializer失败(1) BinaryFormatter失败(2) SoapFormatter失败(3)似乎被弃用了 DataContractSerializer失败(4)AFAIK NetDataContractSerializer似乎失败了(2)因为我读它不是“可互操作的”(虽然它确实使用XML ??)
    Protobuf-net失败了(2)。

    您能推荐使用序列化程序吗?
    另外: NetDataContractSerializer如何不能互操作?请举例说明它是否会破坏互操作性。

    注意:所有这些序列化程序都支持这种或那种方式的版本容差,但我需要更高级的版本容差功能。如果您关心原因,请参阅this question of mine

    编辑:事实证明,DataContractSerializer和NetDataContractSerializer都同时支持(2)和(4),所以我的问题就解决了。

1 个答案:

答案 0 :(得分:1)

我认为您不需要自定义序列化程序,我认为您需要在类中使用自定义序列化方法。

例如:如果您使用XmlSerializer,则可以在数据类上实现IXmlSerializable,并手动实现可涵盖版本,私有或公共数据或任何内容的任意组合的方法其他。同样,如果您使用二进制序列化,ISerializable可用于自定义行为。

如果你需要支持泛型集合,你可以实现一个像这样定义的类来解决问题(为了举例,可以使用Xml序列化程序):

public class FooList : List<Foo>, IXmlSerializable

这允许您自定义半泛型集合类的序列化。或者,也许更可重复使用:

public class CustomSerializableList<T> : List<T>, IXmlSerializable where T : IXmlSerializable

...它为您提供了一个通用列表,其内容保证为IXmlSerializable,这意味着列表本身的IXmlSerializable实现非常简单。