我有一个现有的代码库,它通过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序列化对象中的字段?