.net二进制格式化程序反序列化一个定义发生了很大变化的对象

时间:2014-10-05 17:36:37

标签: .net serialization binaryformatter

我正在尝试反序列化使用旧版本序列化的文件。

在新版本中,我们做了以下事情

  1. 更改名称空间
  2. 将班级成员访问级别从私人更改为公共
  3. 添加新的内部父类。 A类来自Base。现在,A类派生自B,B派生自Base。在B中,没有新成员介绍。
  4. 基类添加新成员。
  5. 我知道使用SerializationBinder可以解决问题1.对于新添加的类成员,我标有[NonSerialized]。但我仍然得到反序列化错误。

    任何指针?

1 个答案:

答案 0 :(得分:2)

我不想这么说,但我的第一个指针就是“不要那样做” - BinaryFormatter非常脆弱 - 而你可以经常把头砸到键盘用了6个小时才能超越每个连续的痛点,真的不值得。我总是说“不要使用BinaryFormatter”有很多原因 - 你遗憾地发现其中有4个。坦率地说,我的建议是:

  • 放回原始类,并将其用作DTO来反序列化旧数据
  • 开始转移到您拥有单独的DTO模型和实体模型的模型 - 并在它们之间进行映射,以便您的序列化完全独立于您的应用程序逻辑
  • 研究不同的序列化器;几乎所有替代序列化器都优于BinaryFormatter(除了NetDataContractSerializer之外,它会重复所有相同的错误; DataContractSerializer是好的,但是)

对不起,这不是更积极的......