与.NET序列化兼容的版本是什么?

5
.NET序列化的版本兼容性实现方法有哪些?
2个回答

1

如果您使用的是BinaryFormatter(通常是这种情况),请不要使用它来存储数据,因为它不适合此用途(在我看来),只适合于传输(而且版本控制在这里不是很重要,因为您可能控制管道的两端)。还有许多其他类型的序列化器可供选择;它们中的大多数都可以很好地处理版本控制。

就我个人而言,我会选择以下几种:

  • xml:XmlSerializer(DataContractSerializer在输出方面不够灵活,但可以处理图形)
  • json:JavaScriptSerializer
  • 二进制:protobuf-net(我在这里有偏见)

使用其中任何一种,您都应该可以轻松处理版本控制、添加成员、重命名字段等问题。

实际上,即使我只是进行传输(而不是存储),我也会使用以上3种方法。


0

我只能以相对笼统的方式回答。

关于控制二进制序列化版本差异,请阅读以下MSDN文章:

http://msdn.microsoft.com/en-us/library/ms229752(v=vs.80).aspx

关于XML序列化,我没有一篇文章,但MSDN详细解释了使用XML属性来控制序列化的方法,这些属性也有助于应对版本问题:

http://msdn.microsoft.com/en-us/library/83y7df3e(v=VS.85).aspx

http://msdn.microsoft.com/en-us/library/2baksw0z(v=VS.85).aspx

OnDeserializedAttribute 在手动处理版本控制方面也非常有用,您可以在此处设置未从反序列化流中设置的新值的默认值:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.ondeserializedattribute.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接