2012-02-28 52 views
3

我正在使用由使用XML与设备进行通信的第三方提供的库。根标签有2个属性必须存在。文档中的所有示例都显示了以特定顺序出现的这两个属性。任何方式来控制.NET XmlSerializer输出属性的顺序?

我已经创建了类,用于.NET XmlSerializer类,该类包含用相应的XmlAttribute属性标记的属性。对于我的类,XmlSerializer的输出具有与文档中所有示例相反顺序的这两个属性。

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

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

至少我可以解析Xml返回给我的XmlSerializer类&它属性对我的代码的顺序无关紧要。

感谢

托尼

回答

1

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

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

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

这一切都将消失,一旦他们已经修复了他们的解析器。

谢谢大家。

Tony

0

恐怕实现IXmlSerializable是你在这一点上唯一的选择。

+0

我相信你是对的。但是,由于图书馆将被修复,我实施了临时修复。请参阅下面的答案 – 2012-02-29 21:36:12