有没有办法控制.NET XmlSerializer输出属性的顺序?

时间:2012-02-28 22:10:03

标签: .net xml-serialization

我正在使用由第三方提供的库,该库使用XML与设备进行通信。根标签有2个必须存在的属性。文档中的所有示例都显示这两个属性以特定顺序出现。

我已经创建了与.NET XmlSerializer类一起使用的类,这些类包含使用适当的XmlAttribute属性标记的属性。我的类的XmlSerializer的输出具有这两个属性,与文档中所有示例的顺序相反。

如果我将我的代码生成的XML传递给库,我会收到错误返回值。然而,仅仅为了踢,我修改了XML&颠倒了属性的顺序。 Lo&看,我得到了一个好的回报值。该文档说该库是用Ansi C编写的,所以我很确定他们没有使用.NET XmlSerializer。

我知道XML标准认为归属的顺序并不重要。我已经通知他们他们的代码违反了标准,希望他们能解决它。但是在 与此同时,我必须在这个项目上取得进展。有什么办法可以让XmlSerializer以相反的顺序输出属性吗?或者我将不得不自己生成XML(这是一个巨大的痛苦)?

至少我可以使用XmlSerializer类和&解析返回给我的Xml。属性在我的代码中的顺序无关紧要。

由于

2 个答案:

答案 0 :(得分:1)

图书馆将被修复,所以我决定实施一个非常快速和肮脏的修复。

我最初做的是实现一个ToXml()方法,该方法返回一个包含XmlSerializer发出的XML的字符串。此方法在抽象基类中实现。我所做的是将此方法标记为虚拟&别管它了。然后,在每个子类中,我实现了ToXml方法的覆盖,该方法只使用string.Format来创建具有所需顺序的属性的Xml。

这需要花费大约5分钟来实施,因为我几乎不得不复制&几次粘贴相同的几行代码。

一旦他们修复了解析器,这一切都会消失。

谢谢大家。

答案 1 :(得分:0)

我担心在这一点上实施IXmlSerializable是你唯一的选择。