【问题标题】:C# deserialization from base type fails trying to convert to derived type基类型的 C# 反序列化尝试转换为派生类型失败
【发布时间】:2017-06-15 19:58:12
【问题描述】:

我有两个类,一个派生自另一个。 在创建Derived 类之前,我将Base 类对象的List 序列化为二进制文件,现在我尝试将它们反序列化,但是即使我尝试将反序列化结果分配给object 或不分配任何东西,我得到一个例外:“无法将类型Base转换为类型Derived”在调用Deserialize方法的行。但是,如果我将Derived 类重命名为Base,它会反序列化,将Base 中不存在的Derived 属性保留为null

如果可以,我可以在反序列化期间如何让BinaryFormatter 不尝试将Base 类转换为Derived

【问题讨论】:

  • 您能给我们看一个代码示例,以便我们自己重现错误吗?
  • @EdPlunkett 我已经找到了问题的原因,但感谢您的关注。
  • 如果你愿意,你可以answer your own question,然后接受答案。
  • @dbc 谢谢,作为用户,我对 StackOverflow 还很陌生,所以我没有注意到我可以这样做。

标签: c# wpf serialization


【解决方案1】:

我自己找到了答案。

Base 类有一个 A 类对象列表,在我序列化 Base 对象列表时,它们中的每一个都引用了 Base 类。在我尝试反序列化它的那一刻,A 对象在代码中引用了Derived 对象,但在文件中它们仍然引用了Base,这导致了转换错误。所以问题在于我将Base 对象版本化为Derived,但忘记了A 对象的版本化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多