我有一個現有的代碼庫,它通過NetDataContractSerializer
將一些簡單的類保留在磁盤上,但不幸的是類不是用[DataContract]
而是用[Serializable]
來裝飾的。這工作正常,但現在我想添加一些新的屬性到持久化類,同時仍然能夠讀取舊版本生成的文件。反序列化DataContract/Serializable混雜的可選屬性
比方說,這是類:
[Serializable]
public class Persisted
{
public int OldProperty {get;set;}
public int NewProperty {get;set;}
}
現在,當我反序列化的舊文件,我得到一個例外,因爲它們不包含NewProperty
。這是有道理的。所以我想NewProperty
被忽略,但雖然有[OptionalField]
屬性讓序列化程序忽略缺少的字段,但它不能應用於僅屬性字段。
所以我想我會使用[DataContract]
和[DataMember]
,它也有IsRequired
屬性,但這改變了序列化文件的佈局,並且它不能讀取舊的數據文件。此外,您不能混用[Serializable]
和[DataMember]
- 如果序列化程序看到[Serializable]
屬性,則忽略[DataMember]
指令。
因此,禁止選擇對舊文件進行一次性轉換(可能,但不是我的第一選擇),是否有辦法讓NetDataContractSerializer忽略現有XML序列化對象中的字段?