如何使用XmlSerializer指定XmlAttributes的顺序

时间:2010-04-12 15:47:02

标签: xml serialization xml-serialization

XmlElement有一个“Order”属性,您可以使用该属性在使用XmlSerializer进行序列化时指定属性的精确顺序(无论如何相互关联)。

XmlAttribute是否有类似的东西?我只想设置属性的顺序,如

<MyType end="bob" start="joe" />

<MyType start="joe" end="bob" />

这只是为了可读性,我自己的利益。

5 个答案:

答案 0 :(得分:9)

您没有,因为属性在XML中没有顺序(XML建议的第3.1节说:“请注意,start-tag或empty-element标记中的属性规范的顺序并不重要。”)。< / p>

答案 1 :(得分:8)

根据我的经验,属性序列化的顺序与您定义公共属性的顺序相同。但是,如果将属性与同一类中的字段组合在一起,例如

[Serializable()]
public class MyClass
{
   [XmlAttribute("ADoubleProp")]
   public double ADoubleProp { get; set; }

   [XmlAttribute("AnIntField")]
   public int AnIntField = 42;
}

然后字段将第一个作为属性写入,然后是属性。上面的代码会生成类似这样的内容

<MyClass AnIntField="42" ADoubleProp="0" />

答案 2 :(得分:1)

在C#中,就我所发现的而言,属性的顺序按照它们在类中定义的顺序被序列化。

请在此处查看我对此问题的回答:https://stackoverflow.com/a/21468092/607117

答案 3 :(得分:0)

如果要动态创建XML,请尝试更改将属性附加到节点的顺序,它应该可以工作:)

答案 4 :(得分:0)

xmlNode.Attributes.InsertAfter(newAttribute, refAttribute); 
xmlNode.Attributes.InsertBefore(newAttribute, refAttribute);