数据合同序列化程序向后兼容性

本文关键字:兼容性 程序 合同 序列化 数据 | 更新日期: 2023-09-27 18:35:11

我正在尝试从序列化对象的旧版本反序列化,并收到一个错误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?

数据合同序列化程序向后兼容性

从上面的评论中回答给后人: 将 DataContract 属性添加到 ClassB 修复了此问题。XML 序列化和 DataContractSerialization 现在都在该类 B 上工作