C# 以编程方式升级XML模式

C# 以编程方式升级XML模式,c#,xml-serialization,xsd,linq-to-xml,platform,C#,Xml Serialization,Xsd,Linq To Xml,Platform,由于平台供应商需要将存储机制存储在XElement对象中,而不是存储在我在其数据库中创建的数据表中,因此我不得不重新编写一个项目。这变得很痛苦,我需要一些洞察力 我可以使用XmlSerializer将我的对象图变形为Xml或从Xml中变形,并对给定的XElement对象进行读/写操作,但我不确定在需要更改对象图时如何升级Xml数据 有没有人遇到过这种情况,哪些文章被证明是学习如何构建这种更新方法的最佳途径。谢谢。我以前遇到过这种令人沮丧的情况。。。 我认为这不能用XmlSerializer来完成

由于平台供应商需要将存储机制存储在XElement对象中,而不是存储在我在其数据库中创建的数据表中,因此我不得不重新编写一个项目。这变得很痛苦,我需要一些洞察力

我可以使用XmlSerializer将我的对象图变形为Xml或从Xml中变形,并对给定的XElement对象进行读/写操作,但我不确定在需要更改对象图时如何升级Xml数据


有没有人遇到过这种情况,哪些文章被证明是学习如何构建这种更新方法的最佳途径。谢谢。

我以前遇到过这种令人沮丧的情况。。。 我认为这不能用XmlSerializer来完成。XmlSerializer编译围绕当前类型层次结构定制的序列化例程。如果更改太多,XML将与新的类结构不兼容

我认为不会生成任何XML模式,唯一的“模式”是已编译的即席XML序列化程序代码

你可以做你想做的事 1) 创建反映您的更改的新类, 2) 将XML反序列化到旧类中, 3) 在新旧对象之间应用变形, 4) 序列化新对象, 5) 将类的名称更改为旧名称, 6) 替换XML中的临时名称

但这是非常痛苦的(尽管一次性的也可以)


如果您需要处理频繁的更改(或者如果您使用不利于序列化的编译器,如当前的F#one),最好的办法是编写您自己的XmlSerializer(可能使用Linq2XML)来处理代码更改。

我以前就遇到过这种令人沮丧的情况。。。 我认为这不能用XmlSerializer来完成。XmlSerializer编译围绕当前类型层次结构定制的序列化例程。如果更改太多,XML将与新的类结构不兼容

我认为不会生成任何XML模式,唯一的“模式”是已编译的即席XML序列化程序代码

你可以做你想做的事 1) 创建反映您的更改的新类, 2) 将XML反序列化到旧类中, 3) 在新旧对象之间应用变形, 4) 序列化新对象, 5) 将类的名称更改为旧名称, 6) 替换XML中的临时名称

但这是非常痛苦的(尽管一次性的也可以)


如果您需要处理频繁的更改(或者如果您使用不利于序列化的编译器,如当前的F#one),最好的办法是编写您自己的XmlSerializer(可能使用Linq2XML)来处理代码更改。

我知道您想在更改类定义时更新XML数据吗,没有重新序列化?听起来很棘手……是的。这正是我想做的。我正试图弄明白这一点,因为我别无选择,只能用这种方法来处理。我记得有一种方法可以重载序列化/反序列化方法,我还以为过去有人这样做是为了解决这个问题。我的想法是,当我需要更改定义时,我可以运行某种脚本,将旧的XML格式读入内存,使变形成为必需,然后序列化为新的XML格式。我是否理解您希望在更改类的定义时更新XML数据,而不重新序列化?听起来很棘手……是的。这正是我想做的。我正试图弄明白这一点,因为我别无选择,只能用这种方法来处理。我记得有一种方法可以重载序列化/反序列化方法,我还以为过去有人这样做是为了解决这个问题。我的想法是,当我需要更改定义时,我可以运行某种脚本,将旧的XML格式读入内存,使变形成为必需,然后序列化为新的XML格式。。您能否详细介绍一下使用Linq2Xml并构建自己的XmlSerializer的想法?听起来像是我在想的路线,但不确定整个Linq2Xml的事情。我在想,如果主对象可以保存一个“version”属性,那么它可能会被用作升级脚本的一部分,不管是什么。嗯。。您能否详细介绍一下使用Linq2Xml并构建自己的XmlSerializer的想法?听起来像是我在想的路线,但不确定整个Linq2Xml的事情。我在想,如果主对象可以拥有一个“version”属性,那么它可能会被用作升级脚本的一部分,不管是什么。