【问题标题】:DataContractSerializer forward compatibility problemDataContractSerializer 前向兼容性问题
【发布时间】:2011-08-22 09:32:29
【问题描述】:

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

【问题讨论】:

  • 我不知道 DCS 解决方案,但如果您不绑定到 xml,我可能有一个解决方案...
  • 我不需要 xml。你有什么建议?
  • 我维护 protobuf-net,一个替代的序列化器;意外的子类型可以被静默忽略,同时仍然保留层次结构中您确实期望的类型的任何值

标签: c# serialization xml-serialization


【解决方案1】:

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

我推荐以下资源来了解有关此功能的更多信息并了解如何针对您的特定情况实施它:

Forward-compatible data contracts

Data contract versioning

IExtensibleDataObject sample

And even more guidance on data contract versioning...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多