【发布时间】:2014-08-14 16:46:41
【问题描述】:
以前,序列化/反序列化方法使用Item类型:
public class Item{}
现在我有一个名为 ItemWrapper 的新类,它从 Item 派生,并带有一个附加属性:
public class ItemWrapper : Item
{
public string NewProperty { get; set; }
}
现在我的序列化/反序列化方法使用ItemWrapper 类型。现在我打破了向后兼容性。我无法加载保存在旧版本中的任何Item 类型的 XML 文件。当它尝试将Item 反序列化为ItemWrapper 时,我考虑在反序列化方法上放置一个try/catch,然后在catch 中我将尝试反序列化为Item。或者我可以通过 xPath 来查看 XML 结构,如果没有找到 ItemWrapper,我可以假设它为 Item。这两种解决方案都感觉很老套,我相信有更好的方法来处理这种情况。有什么想法吗?
【问题讨论】:
-
你在项目上尝试过
[XmlInclude(typeof(ItemWrapper))]吗? -
这将解决我使用“项目”的问题。但是,我只是在继续序列化“ItemWrapper”。对我来说,问题是我有一个旧版本的 XML,它只有一个基于“项目”的 XML 结构。因此,当我反序列化这些旧 XML 时,它会引发异常。该属性对我没有帮助解决这个问题。
标签: c# xml serialization backwards-compatibility xml-deserialization