我正在重新编写项目,因为平台供应商需要存储机制在XElement对象中,而不是存储在我在其数据库中创建的数据表中。它变得很痛苦,我需要一些见解。
我可以使用XmlSerializer将对象图转换为Xml,并从我给出的XElement对象读取/写入,但是当我需要更改时,我不确定如何升级Xml数据对象图。
有没有人面对这个问题,哪些文章已经证明最好学习如何构建这样的更新方法。感谢。
答案 0 :(得分:1)
我之前一直处于这种令人沮丧的境地...... 我认为使用XmlSerializer无法做到这一点。 XmlSerializer编译一个围绕当前类型层次结构自定义的序列化例程。如果更改太多,XML将与新的类结构不兼容。
我认为没有生成任何XML Schema,唯一的'schema'是编译的ad-hoc XML序列化器代码。
你可以做你想做的事 1)创建反映您的更改的新类, 2)将XML反序列化为旧类, 3)在新旧物体之间应用变形, 4)序列化新对象, 5)将类的名称更改为旧的, 6)替换XML中的临时名称,
但是它非常痛苦(尽管它可能是一次性的)。
如果您需要应对频繁的更改(或者如果您使用序列化不友好的编译器,如当前的F#),那么最好的想法是编写您自己的 XmlSerializer(可能使用Linq2XML)可以应对代码更改。