【问题标题】:Deserialization of Auto-Generated Classes自动生成类的反序列化
【发布时间】:2018-08-09 07:38:20
【问题描述】:

我正在使用二进制序列化将对象保存到配置文件并再次读回它们。其中一个类有一个事件处理程序,我在以前的版本中忘记用NonSerializedAttribute 进行标记,所以这些信息已经在一些配置文件中结束了。更复杂的是,这个处理程序是用 lamda 表达式初始化的,这会强制编译器自动为其生成一个匿名类型。

public event PropertyChangedEventHandler PropertyChanged = (sender, args) => { };

问题是该类型名称在后续构建中发生了更改,因此当BinaryFormatter 遇到未知类型时,它会抛出SerializationException(“找不到成员:<.ctor>b__1”)。我似乎无法在正确的位置捕捉​​到这个异常,因为它发生在mscorlib.dll 的深处,而且我对SerializationBinder 没有运气。

有什么方法可以强制BinaryFormatter 忽略此字段,或将其从序列化流中完全删除?我应该补充一点,这个类没有实现 ISerializable 接口。

【问题讨论】:

    标签: c# .net deserialization binaryformatter


    【解决方案1】:

    也许我遗漏了什么,但你不能只用NonSerializedAttribute 标记该字段吗?

    【讨论】:

    • 我的理解是,如果该字段在应用程序的先前版本中被序列化,那么 BinaryFormatter 将始终尝试反序列化它,而不管当前版本中的 NonSerializedAttribute。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2021-11-20
    • 2016-08-16
    • 2012-05-09
    相关资源
    最近更新 更多