开发者

How to specify the order of XmlAttributes, using XmlSerializer

XmlElement has an "Order" attribute which you can use to specify the precise order of your properties (in relation to each other anyway) when serializing using XmlSerializer.

public class bookingList
{
    [XmlElement(Order = 1)]
    public string error { get; set; }
    [XmlElement(Order = 2)]
    public int counter { get; set; }
    [Xm开发者_JAVA技巧lElement(ElementName = "booking", Order = 3)]
    public List<booking> bookings = new List<booking>();
}

Is there a similar thing for XmlAttribute? I just want to set the order of the attributes from something like

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

to

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

This is just for readability, my own benefit really.


You don't, as attributes have no order in XML (section 3.1 of the XML recommendation says: "Note that the order of attribute specifications in a start-tag or empty-element tag is not significant.").


From my experience, the order of serialization of attributes is the same as the order you define your public properties. However, if you combine properties with fields in the same class, e.g.

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

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

then the fields get written firsts as attributes and then the properties. The code above will produce something like this

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


In C#, as far as what I have found, the order of attributes are serialized in the order that they are defined in the class.

See my answer to this question here: https://stackoverflow.com/a/21468092/607117


If you are creating the XML dynamically, try changing the order in which you append the attribute to the node and it should work :)


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜