.NET序列化的版本兼容性实现方法有哪些?
如果您使用的是BinaryFormatter(通常是这种情况),请不要使用它来存储数据,因为它不适合此用途(在我看来),只适合于传输(而且版本控制在这里不是很重要,因为您可能控制管道的两端)。还有许多其他类型的序列化器可供选择;它们中的大多数都可以很好地处理版本控制。
就我个人而言,我会选择以下几种:
使用其中任何一种,您都应该可以轻松处理版本控制、添加成员、重命名字段等问题。
实际上,即使我只是进行传输(而不是存储),我也会使用以上3种方法。
我只能以相对笼统的方式回答。
关于控制二进制序列化版本差异,请阅读以下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