2010-06-29 74 views
1

由于平台供应商需要将存储机制放在XElement对象中,而不是存储在我的数据库中创建的数据表中,因此我正在重写项目。这变得很痛苦,我需要一些见解。以编程方式升级XML Schema

我可以使用XmlSerializer将我的对象图形变为/从Xml中读取/从我给出的XElement对象中读取/写入,但我不知道如何在需要更改时升级Xml数据对象图。

有没有人遇到过这个问题,哪些文章已经证明最好的学习如何构建这样的更新方法。谢谢。

+0

我是否理解在更改类的定义时要更新XML数据,而无需重新序列化? 这听起来很棘手...... – Mau 2010-06-29 13:21:01

+0

是的。这正是我想要做的。我试图弄清楚这一点,因为我没有选择,只能用这种方法来处理。我记得有一种方法可以重载序列化/反序列化方法,并且曾经认为有人在过去做过这个来解决这个问题。 – 2010-06-30 17:23:55

+0

这个想法是当我需要改变定义的时候,我可以运行一个脚本来将旧的XML格式读入内存,制作需要的变形,然后序列化为新的XML格式。 – 2010-06-30 17:25:03

回答

1

我一直在这种令人沮丧的情况...... 我认为这不能使用XmlSerializer完成。 XmlSerializer编译一个在当前类型层次结构周围定制的序列化例程。如果您更改太多,则XML将与新的类结构不兼容。

我不认为会产生任何XML模式,唯一的'模式'是编译的特设XML序列化程序代码。

可以你想通过 1)创建类,反映您的变更, 2)deserialising的XML到老班什么, 3)采用新老对象之间的变形, 4)序列化的新对象, 5)改变了类名的旧的, 6)在XML取代Temp名称,

但它是非常痛苦的(尽管它可能是不错的方法一次性) 。

如果你需要应付频繁变动(或者,如果你使用序列不友好的编译器像目前的F#之一),这里最好的办法是自己的XmlSerializer(可能使用Linq2XML)来编写能够与代码应付变化。

+0

嗯..您可以详细说明使用Linq2Xml并构建自己的XmlSerializer的想法吗?听起来像我在想的路线,但不知道整个Linq2Xml的东西。 我在想,如果主对象可以拥有“版本”属性,也许可以将其用作升级脚本的一部分,无论这可能是什么。 – 2010-07-01 03:20:58

相关问题