【问题标题】:Transform XML to be deserialized with newer version将 XML 转换为使用较新版本进行反序列化
【发布时间】:2011-10-09 04:07:38
【问题描述】:

我们有一个应用程序,它使用 xml 序列化来序列化和反序列化其配置设置。

我们将发布这个应用程序的新版本,它的对象模型有一些巨大的变化。我们的用户还没有准备好用更新的版本重新配置设置。我们需要一种将以前版本的 xml 转换为新版本兼容 xml 的解决方案。较新的版本删除了一些类、重命名了、添加了属性等。

转换旧 xml 以便新版本可以对其进行反序列化的最佳方法是什么?

【问题讨论】:

    标签: c# .net xml xml-serialization


    【解决方案1】:

    当您第一次加载 xml 时,您必须确定它是什么版本。最简单的可能是制作一个将旧配置转换为新格式的函数。这样新的格式加载器就可以一直使用,你可以摆脱旧的和旧的对象模型。

    可以使用 xslt 或 c# 代码完成转换。

    【讨论】:

      【解决方案2】:
      • 保留两个对象图,一个代表旧版本,一个代表新版本。 反序列化旧版本并用它创建新的对象图;所以下次保存xml的时候;它将使用新模式保存。在下一个版本中,您可以删除此向后兼容功能。

      • 您可以在 xml 中搜索旧格式的模式,然后使用 XSLT 或 Anders Abel 建议的代码将其转换为新的 xml。但这应该在加载时自动完成。保存文件时,您应该警告用户它将使用新格式保存,并且不会与早期版本兼容。

      【讨论】:

        【解决方案3】:

        我认为您可能会使用 MEF 或 SystemAddIns 来实现 OM 的版本化和可扩展性,以及简单的 XML-to-Object 映射器,就像我发明的 http://xmlserialization.codeplex.com/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-03
          • 2016-03-02
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          相关资源
          最近更新 更多