[英]How can I keep a serializable class backwards compatible when switching away from an auto-implemented property
我有这样的课:
[Serializable]
public class MyClass
{
public Dictionary<string, int> MyProperty { get; set; }
}
我需要更改MyProperty,以使其不再自动实现。 我的问题是,这会破坏兼容性吗? 换句话说,在此更改之前序列化的MyClass实例是否可以在此更改之后正确地反序列化? 我需要做任何保证的事情吗? 什么规则支配它如何工作?
供参考,我想要类似的东西:
[Serializable]
public class MyClass
{
private Dictionary<string, int> _myProperty;
public Dictionary<string, int> MyProperty
{
get { return this._myProperty; }
set { Validate(value); this._myProperty = value; }
}
}
编辑:我尝试了这个特定的玩具示例,它似乎起作用,但这并没有给我太大的信心,因为我的实际示例更加复杂。 我想了解基本规则,以便可以在测试之前进行有根据的猜测。
您可以使用自定义反序列化来按字段的旧名称提取字段的值。
或者,将此自动属性设为虚拟并从中派生一个类。 这样,您可以使用base.MyProperty
访问自动命名的后备字段。 您可以在派生类中有一个新字段,最好使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.