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