反序列化DataContract / Serializable mish时的可选属性

我有一个现有的代码库,通过NetDataContractSerializer持久化了一些简单的类到磁盘,但不幸的是这些类没有用[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序列化对象中的字段?


问题是,当使用Serializable属性时,序列化的是字段 ,而不是属性。 由于您使用的是自动属性,因此这些字段处于隐藏状态,您无法向其添加属性。

解决方案很简单 - 不要使用自动属性。

链接地址: http://www.djcxy.com/p/58571.html

上一篇: Optional properties when deserializing a DataContract/Serializable mish

下一篇: Implementing a squarified treemap in javascript