由于平台供应商需要将存储机制放在 XElement 对象中,而不是存储在我在他们的数据库中创建的数据表中,我正在重新编写项目。它变得痛苦,我需要一些洞察力。
我可以使用 XmlSerializer 将我的对象图变形为 Xml,并从给定的 XElement 对象中读取/写入,但是当我需要更改对象图时,我不确定如何升级 Xml 数据。
有没有人遇到过这个问题,哪些文章被证明最适合学习如何构建这样的更新方法。谢谢。
由于平台供应商需要将存储机制放在 XElement 对象中,而不是存储在我在他们的数据库中创建的数据表中,我正在重新编写项目。它变得痛苦,我需要一些洞察力。
我可以使用 XmlSerializer 将我的对象图变形为 Xml,并从给定的 XElement 对象中读取/写入,但是当我需要更改对象图时,我不确定如何升级 Xml 数据。
有没有人遇到过这个问题,哪些文章被证明最适合学习如何构建这样的更新方法。谢谢。
我以前一直处于这种令人沮丧的情况......我认为这不能使用 XmlSerializer 来完成。XmlSerializer 编译围绕当前类型层次结构定制的序列化例程。如果更改太多,XML 将与新的类结构不兼容。
我认为不会生成任何 XML 模式,唯一的“模式”是已编译的临时 XML 序列化程序代码。
您可以通过 1) 创建反映您的更改的新类,2) 将 XML 反序列化为旧类,3) 在新旧对象之间应用变形,4) 序列化新对象,5) 更改名称旧的类,6) 替换 XML 中的临时名称,
但这是非常痛苦的(虽然它可能是一次性的)。
如果您需要应对频繁的更改(或者如果您使用像当前的 F# 那样对序列化不友好的编译器),最好的办法是编写自己的XmlSerializer(可能使用 Linq2XML)来应对代码更改。