【问题标题】:Any way to make XmlSerializer output xml in a defined order?有什么方法可以让 XmlSerializer 以定义的顺序输出 xml?
【发布时间】:2009-03-04 19:51:08
【问题描述】:

目前我正在使用 XmlSerializer 序列化和反序列化一个对象。 xml 以未定义的顺序生成,这是可以理解的,但在比较对象的版本时会很烦人,因为每次的属性顺序都不同。因此,例如,我不能使用普通的差异工具来查看任何差异。

是否有一种简单的方法可以每次都以相同的顺序生成我的 xml,而无需自己编写 ReadXml 和 WriteXml 方法?我在类上有很多属性,并且时不时地添加新属性,所以我宁愿不必编写和维护该代码。

(C#.net 2.0)

【问题讨论】:

  • 您能否提供一个重现此“未定义订单”的示例?我从未见过这种情况发生,而且我不知道如果发生这种情况,XML 序列化程序将如何反序列化结果。

标签: c# .net xml xml-serialization


【解决方案1】:

XmlElement 属性有一个order property。您可以以此为起点。

如果您需要在 Xml 文件中查找差异,您可能需要查看this

【讨论】:

    【解决方案2】:

    使用XmlElementAttribute 装饰您的属性,设置Order 参数。

    【讨论】:

      【解决方案3】:

      ps:我不相信 XmlSerializer 生成的 XML 的顺序未定义。它可能是无证的,但它是已知的。我相信在没有 Order 属性的情况下,XmlSerializer 会序列化所有公共属性,按 prop 名称进行 alpha 排序,然后是所有公共字段,按名称进行 alpha 排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 2014-03-24
        相关资源
        最近更新 更多