2010-04-12 28 views
7

XmlElement có thuộc tính "Đặt hàng" mà bạn có thể sử dụng để chỉ định thứ tự chính xác của các thuộc tính của bạn (liên quan đến nhau) khi tuần tự hóa bằng XmlSerializer.Cách xác định thứ tự của XmlAttributes, sử dụng XmlSerializer

Có điều tương tự cho XmlAttribute không? Tôi chỉ muốn thiết lập thứ tự của các thuộc tính từ một cái gì đó giống như

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

để

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

Đây chỉ là để có thể đọc, lợi ích riêng của tôi thực sự.

Trả lời

6

Bạn không, vì thuộc tính không có thứ tự trong XML (phần 3.1 của đề xuất XML nói: "Lưu ý rằng thứ tự các đặc tả thuộc tính trong thẻ bắt đầu hoặc thẻ phần tử trống không đáng kể").

+2

Tôi lấy ý kiến ​​của bạn. Tuy nhiên tôi phải không đồng ý với tuyên bố mà bạn trích dẫn (Tôi biết họ không phải là lời của bạn), thứ tự là quan trọng đối với tôi. Có, nó sẽ vẫn hoạt động theo một trong hai cách, nhưng tôi quan tâm và tôi muốn đặt thứ tự: '( – demoncodemonkey

+2

Là một sang một bên, có tồn tại cái gọi là XML hợp quy nơi các thuộc tính được sắp xếp theo từ điển, xem http: //www.w3. org/TR/xml-c14n11/# DocumentOrder –

+0

Tôi thấy, những gì bạn có thể làm là thực hiện hoặc trình bao bọc của riêng bạn cho XmlWriter và sau đó sắp xếp chúng như bạn thấy phù hợp ở đó. – Lucero

1

Trong C#, theo như những gì tôi đã tìm thấy, thứ tự các thuộc tính được sắp xếp theo thứ tự chúng được xác định trong lớp.

Xem câu trả lời của tôi cho câu hỏi này ở đây: https://stackoverflow.com/a/21468092/607117

7

Từ kinh nghiệm của tôi, thứ tự của serialization thuộc tính cũng giống như thứ tự bạn xác định tài sản công cộng của bạn. Tuy nhiên, nếu bạn kết hợp các thuộc tính với các trường trong cùng một lớp, ví dụ:

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

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

thì trường sẽ được viết đầu tiên làm thuộc tính và sau đó là thuộc tính. Mã ở trên sẽ tạo ra một cái gì đó như thế này

<MyClass AnIntField="42" ADoubleProp="0" /> 
Các vấn đề liên quan