我正在使用第三方提供的库,该库使用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/