.NET中的对象图序列化和代码版本升级

时间:2010-06-04 10:57:23

标签: .net serialization

我需要将一些对象图序列化为光盘

如果我对某个类进行更改,然后尝试反序列化旧版本,我可能会遇到哪些困难?

有些序列化程序能比其他序列化程序更好地处理这个问题吗?

处理这种情况的标准方法是什么?

例如,在新版本的代码中,我是否需要保留所有旧类,以便在反序列化旧文件时我可以对旧类进行反序列化,然后将数据迁移到新类?是否会更改类的名称/命名空间中断反序列化?

感谢您的任何建议

2 个答案:

答案 0 :(得分:3)

好吧,我记得,问题始于:

  • 向班级添加新的字段/属性;
  • 更改现有字段/属性的类型。

您可以让custom serialization自行处理版本问题。

但我建议将DataContractSerializerBest Practices: Data Contract Versioning一起用于最常见的案例。

答案 1 :(得分:1)

这取决于您需要序列化数据的格式。如果您使用.NET 1.0二进制序列化,那么您将被限制为DLL的特定版本。我不建议这样做。

我个人建议将DataContracts与默认的WCF序列化器一起使用:DataContractSerialiser。您可以控制使用[OnDeserializing]IExtensibleDataObject等技术反序列化该类型的其他版本时发生的情况。

您也可以DataContractSerializer输出XML或二进制文件。