转换XML以使用较新版本进行反序列化

时间:2011-07-20 07:42:49

标签: c# .net xml xml-serialization

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

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

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

3 个答案:

答案 0 :(得分:3)

首次加载xml时,必须确定它的版本。最简单的可能是创建一个将旧配置转换为新格式的函数。然后可以一直使用新的格式加载器,你可以摆脱旧的格式加载器和旧的对象模型。

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

答案 1 :(得分:1)

  • 保留两个对象图,一个代表旧版本,另一个代表新版本。 反序列化旧版本并使用它创建新的对象图;所以当下次保存xml时;它将使用新架构保存。在下一个版本中,您可以删除此向后兼容性功能。

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

答案 2 :(得分:0)

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