DataContractSerializer向后兼容

时间:2012-05-22 19:22:06

标签: c# wcf datacontractserializer

我正在尝试从旧版本的序列化对象反序列化,并且我得到一个错误elementNameX_backField不是预期的,期望元素newElementName_backingField。以下是我的代码的样子:

using (var fileStream = new FileStream(fullName, FileMode.Open))
                using (var decryptStream = new CryptoStream(fileStream, decryptor, CryptoStreamMode.Read))
                using (var reader = XmlDictionaryReader.CreateBinaryReader(decryptStream, XmlDictionaryReaderQuotas.Max))
                {

                    var ser = new DataContractSerializer(typeof(classA), KnownTypes);
                    rv = ser.ReadObject(reader) as classA;
                }
[DataContract]
public class classA
{
 [DataMember]
 public classB ClassBee {get; set;}
}
[Serializable]
public class ClassB
{
[XmlElement("element")]
public customType1 elementNameX{get; set;}
[XmlElement("newElement")]
public customType2 newElementName{get; set;}
}

如果在已经序列化的文件中不存在newElement,我怎么能忽略newElement呢?

1 个答案:

答案 0 :(得分:0)

以上评论为后代提供的答案:  将DataContract属性添加到ClassB可以解决此问题。 XML序列化和DataContractSerialization现在都可以在该ClassB上运行