.net - 有什么方法可以控制.NET XmlSerializer输出属性的顺序?

标签 .net xml-serialization

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

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

如果将代码生成的XML传递给库,则会得到错误返回值。但是,只是为了踢球,我修改了XML并颠倒了属性的顺序。瞧,我得到了确定的返回值。文档指出该库是用Ansi C编写的,因此,我很确定他们没有使用.NET XmlSerializer。

我知道XML标准说属性的顺序并不重要。我已通知他们,他们的代码违反了该标准,并希望他们会予以解决。但是在
同时,我必须在这个项目上取得进展。有什么办法可以让XmlSerializer以相反的顺序输出属性?还是我将不得不自行生成XML(在Paotot中痛苦不堪)?

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

谢谢

托尼

最佳答案

该库将被修复,因此我决定实施一个非常快速且肮脏的修复程序。

我最初要做的是实现一个ToXml()方法,该方法返回一个包含XmlSerializer发出的XML的字符串。此方法是在抽象基类中实现的。我所做的就是将该方法标记为虚拟方法,并单独使用。然后,在每个子类中,我实现了一个ToXml方法的重写,该方法仅使用string.Format创建具有所需顺序属性的Xml。

这大约要花5分钟的时间来实现,因为我几乎不得不复制和粘贴相同的几行代码几次。

一旦修复了解析器,所有这些都将消失。

谢谢大家

托尼

关于.net - 有什么方法可以控制.NET XmlSerializer输出属性的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490545/

相关文章:

c# - 通过带有 XML 的 JavaScript 的 WCF 服务 - 数组参数

xml - WCF:序列化?流媒体?

java - ClickOnce 与 Java WebStart

c# - 将 Borland C++ 方法公开给 C#

c# - 在具有两个不同参数的线上找到多个匹配绑定(bind)

java - Staxmate API 的缩进问题

c# - 将对象序列化并存储在另一个实现 IXmlSerializable 的对象中

.net - 来自线程的 Entity Framework 连接管理

c# - 是否建议使用 ECB 密码模式?

c# - 为什么 XML 序列化程序将字符附加到我的 XmlAttribute?