如何在C#中覆盖反序列化

Jea*_*rin 5 c# xml serialization persistence xml-serialization

我有一个课程,随着时间的推移会经历一些版本的变化.作为我的应用程序启动的一部分,来自此类内部的数据被序列化和反序列化.我遇到的问题是,如果我通过添加更多属性来更新类,然后启动应用程序,旧数据将无法正确加载.
我想要做的是覆盖反序列化步骤,我不介意从xml手动重建对象,因为我有一个版本号存储,可以用它来递归更新对象的版本.

有没有我可以实现的接口,或者我可以在某处设置的属性,能够做到这一点?

如果你想不出办法做我想做的事,那还有其他选择吗?例如我正在加载的xml版本中可能不存在的属性的默认值.

Pun*_*ora 2

通常,对于版本控制,您可以对OptionalField可能导致兼容性问题的新添加成员使用该属性。在序列化期间,如果成员未序列化,则会将成员值保留为 null,而不是引发异常。

另外,看看IDeserializationCallback.OnDeserialization允许您自定义反序列化的界面。