我有一个这样的课程:
[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; }
}
}
编辑:我尝试了这个特定的玩具示例,它似乎有效,但这并没有给我很大的信心,因为我的真实例子更复杂。我想了解基本规则,以便在测试之前做出有根据的猜测。
答案 0 :(得分:1)
您可以使用custom deserialization以旧名称提取字段的值。
或者,将此auto属性设为虚拟并从中派生一个类。这样您就可以使用base.MyProperty
来访问自动命名的支持字段。您可以在派生类中使用一个新字段,最好使用该字段。