簡體   English   中英

從自動實現的屬性切換時,如何保持可序列化的類向后兼容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM