DataContractSerializer前向兼容性问题

时间:2011-08-22 09:32:30

标签: c# serialization xml-serialization

我正在使用DataContractSerializer来存储我自己类的对象以保存用户设置。 UserSettings类使用不同数据类型的其他一些对象。我将所有这些类型添加到DataContractSerializer的KnownTypes参数中,它可以正常工作。 但我有前向兼容性的问题。如果我使用新的数据类型在UserSerrings类中引入一个新属性,它也适用于我的程序的新版本。但旧版本抛出异常,说XML文件无法反序列化,因为数据类型不在KnownTypes数组中。 我只是想忽略这些类型,因为它们在旧版本中并没有被使用。 我怎样才能实现这一点,以便旧版本可以读取和写入xml文件而忽略那些未知的属性/类型?

1 个答案:

答案 0 :(得分:2)

这正是IExtensibleDataObject(扩展数据)的设计方案!我们的想法是,如果数据合同的v1使用扩展数据接口进行修饰,它将自动忽略,存储和往返数据合同的未来版本(包括未来未知类型)中的数据,而不会出现任何问题。

我建议您使用以下资源来了解有关此功能的更多信息,并了解如何针对您的特定情况实施该功能:

Forward-compatible data contracts

Data contract versioning

IExtensibleDataObject sample

And even more guidance on data contract versioning...