我需要一种非常特殊的.NET序列化器。
我的要求:
我需要(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),所以我的问题就解决了。
答案 0 :(得分:1)
我认为您不需要自定义序列化程序,我认为您需要在类中使用自定义序列化方法。
例如:如果您使用XmlSerializer
,则可以在数据类上实现IXmlSerializable
,并手动实现可涵盖版本,私有或公共数据或任何内容的任意组合的方法其他。同样,如果您使用二进制序列化,ISerializable
可用于自定义行为。
如果你需要支持泛型集合,你可以实现一个像这样定义的类来解决问题(为了举例,可以使用Xml序列化程序):
public class FooList : List<Foo>, IXmlSerializable
这允许您自定义半泛型集合类的序列化。或者,也许更可重复使用:
public class CustomSerializableList<T> : List<T>, IXmlSerializable where T : IXmlSerializable
...它为您提供了一个通用列表,其内容保证为IXmlSerializable
,这意味着列表本身的IXmlSerializable
实现非常简单。