Optional properties when deserializing a DataContract/Serializable mish

I have an existing codebase that persists a couple of simple classes to disk via NetDataContractSerializer , but the classes are unfortunately not adorned with [DataContract] , but rather with [Serializable] . This works fine, but now I want to add a few new properties to the persisted classes, while still be able to read the files generated by the old version.

Let's say this is the class:

[Serializable]
public class Persisted
{
    public int OldProperty {get;set;}
    public int NewProperty {get;set;}
}

Now, when I deserialize the old files, I get an exception because they don't contain NewProperty . This makes sense. So I wanted to have NewProperty ignored, but while there's a [OptionalField] attribute to have the serializer ignore the missing field, it can't be applied to properties - only fields.

So I figured I'll use [DataContract] and [DataMember] , which also has an IsRequired property, but this changes the layout of the serialized file, and it can't read the old data files. Moreover, you can't mix [Serializable] and [DataMember] - if the serializer sees the [Serializable] attribute, it ignores the [DataMember] directives.

So, barring the option to do a one-time conversion of the old files (possible, but not my first choice), is there a way to get the NetDataContractSerializer to ignore a field in an existing XML serialized object?


The problem is that when using the Serializable attribute, what gets serialized are fields , not properties. Since you're using auto-properties, the fields are hidden and you can't add attributes to them.

The solution is simple - don't use auto-properties.

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

上一篇: 通过实体中的列表对象化查询过滤器包含搜索参数

下一篇: 反序列化DataContract / Serializable mish时的可选属性