2

我目前正在使用的 XML 是使用 XML 序列化程序(序列化类及其嵌套的计数器部分)直接形成的

此外,如果有一个新的添加Property是由序列化程序直接处理的,但是当有一个deletion of property (value Type)removal of and entire class or addition of class

我希望阅读旧的和新的 XML 文件......我似乎无法弄清楚如何......

过程

预期的 XML 升级过程

从某种角度

但我不认为这些对可维护的代码有好处

1) 制作自定义 XML 解析器(这将不那么灵活,因为每次更改完成时都必须更新解析器并因此再次测试)。
2)使用多个模型,然后从旧模型迁移到新模型(采用必要的组件)
3)导出旧文件并导入新文件(这也需要另一个 XML 文件,可能与第 2 点有关)
4)任何其他方式(请建议)

我不太熟悉 XML 及其版本控制。对于这个或我可以用来代替 XML 的任何其他文件类型/DB,XML 也是一个不错的选择

在这方面的任何帮助都会有所帮助。

4

2 回答 2

0

我通常遵循您的解决方案“#2”,在其中我命名模型版本(Myapp.Models.V1.MyModel),这样您可以保持与仍然使用旧模式的客户端的向后兼容性(或者在您的情况下,加载旧文件) .

正如评论中所建议的,您可以使用根节点上的简单属性来确定版本,并使用 xmlreader,甚至是文件第一行的简单正则表达式来读取版本号。

至于您的第二个问题,关于文件类型/db,根据您的需要,我强烈建议您查看像 MongoDB 或 RavenDB 这样的文档数据库,因为实现简单/简单,并且不需要使用 ORM 工具,如实体框架来处理适当的关注点分离。如果您需要可移植的东西,例如桌面应用程序“保存文件”,SqlLite 是一个很好的基于文件的数据库,但您可能希望使用 ORM 将您的模型映射到数据库。

链接:

于 2013-07-01T08:00:56.140 回答
0

在大多数情况下,XmlSerializer已经内置了很好的版本支持。在大多数情况下,如果您添加或删除元素,这不是问题:额外(意外)数据将被静默忽略 - 或放入[XmlAnyElement]/[XmlAnyAttribute]成员(如果有)往返。任何丢失的数据都不会被初始化。唯一值得注意的问题是子类型,但是添加和删除子类型(或整个类型)对于任何序列化器来说都是相当基础的。子类型的一个常见选项是:使用单个模型,但不要删除任何子类型(添加子类型很好,假设您不需要向前兼容)。但是,如果这是不可能的,那么多个模型(每个版本的模型)不是一个坏方法。

于 2013-07-01T08:02:54.877 回答