gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:44:56 25 4
gpt4 key购买 nike

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

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

  1. 更改命名空间
  2. 更改类(class)成员访问级别,从私有(private)到公共(public)
  3. 添加一个新的父类。 A 类派生自 Base。现在,A 派生自 B,B 派生自 Base。 B组没有新成员介绍。
  4. 基类添加了一个新成员。

我知道使用SerializationBinder可以解决问题1。对于新添加的类成员,我已经标记为[NonSerialized]。但是我仍然遇到反序列化错误。

有什么建议吗?

最佳答案

我不想这么说,但我的第一个建议是“不要那样做” - BinaryFormatter 非常脆弱 - 虽然你可以经常破坏你的连续敲打键盘 6 个小时来克服每个连续的痛点,这真的不值得。我总是说“不要使用 BinaryFormatter”的原因有很多 - 您很遗憾地发现了其中的 4 个。坦率地说,我的建议是:

  • 放回原来的类,把它当作DTO来反序列化旧数据
  • 开始转向您拥有独立 DTO 模型和实体模型的模型 - 并在它们之间进行映射,以便您的序列化完全独立于您的应用程序逻辑
  • 研究不同的序列化程序;几乎任何替代的序列化程序都比 BinaryFormatter 更可取(也许 NetDataContractSerializer 除外,它会重复所有相同的错误;DataContractSerializer 还可以, 虽然)

抱歉,这不是更积极的...

关于.net 二进制格式化程序反序列化定义已发生很大变化的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26205347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com