在切换自动实现的属性时,如何使可序列化类向后兼容

时间:2014-08-13 21:00:00

标签: c# serialization

我有一个这样的课程:

[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; }
    }
}
编辑:我尝试了这个特定的玩具示例,它似乎有效,但这并没有给我很大的信心,因为我的真实例子更复杂。我想了解基本规则,以便在测试之前做出有根据的猜测。

1 个答案:

答案 0 :(得分:1)

您可以使用custom deserialization以旧名称提取字段的值。

或者,将此auto属性设为虚拟并从中派生一个类。这样您就可以使用base.MyProperty来访问自动命名的支持字段。您可以在派生类中使用一个新字段,最好使用该字段。