2012-07-12 72 views
0

我可以成功地在xml文件中編寫我的類Item。但是atttributes變化的訂單......net xmlserializer:保留屬性順序

假設我有Item類

class Item 
{ 
    Name 
    Price 
    Id 

} 

當我使用.NET的XmlSerializer將其寫入到XML文件,我從我的課decleration得到不同的順序,例如

<Item Price="y" Name="x" Id="z" /> 

但我想它像這樣[保持decleration爲了]

<Item Name="x" Price="y" Id="z" /> 

我該怎麼辦它在NET?

+5

這可能是一個愚蠢的問題,但由於這是XML,你應該使用XML庫分析它....爲什麼這很重要? – asawyer 2012-07-12 12:54:20

+1

我不依賴於訂單的人......我只是想要一些化妝品好看我的XML ...我知道XML不適合人類閱讀......但我對「形式」很生氣,我希望它一些命令... – Novalis 2012-07-12 13:09:07

回答

2

你不應該認同這個命令。如果你是,那麼你是不是處理您的XML正確

3.1節「需要注意的是屬性規格在 起始標籤或空元素標籤的順序並不顯著。」

+0

我知道XML不適合人類閱讀......它可能很愚蠢,但我想要訂單只是因爲一些「化妝品」好看...這就是全部...... – Novalis 2012-07-12 13:07:05

+0

我個人wouldn'麻煩,就像你說的那樣,不適合人類閱讀。但如果你真的想,我認爲這篇文章可能會處理類似的東西http://blogs.microsoft.co.il/blogs/rotemb/archive/2008/07/27/customize-object-xml-serialization-with-net -xml-attributes.aspx – saj 2012-07-12 13:18:23

0

你是熱衷於屬性的順序,然後IXmlSerializable接口將讓你控制類的序列化/反序列化過程。屬性的順序通過的代碼行的順序來確定:

public void WriteXml(XmlWriter writer) 
{ 
    //First example xml element 
    writer.WriteStartElement("Item1"); 
    writer.WriteAttributeString("Name", Name); 
    writer.WriteAttributeString("Price", Price); 
    writer.WriteAttributeString("Id", Id); 
    writer.WriteEndElement(); 

    //Second example xml element 
    writer.WriteStartElement("Item2"); 
    writer.WriteAttributeString("Price", Price); 
    writer.WriteAttributeString("Id", Id); 
    writer.WriteAttributeString("Name", Name); 
    writer.WriteEndElement(); 
} 

輸出:

<Item1 Name="x" Price="y" Id="z"> 
<Item2 Price="y" Id="z" Name="x"> 

正如所看到的,如果你身邊的代碼行切換,則該順序改變。

但是要小心,實現這個接口會覆蓋默認的進程,讓你來編寫整個序列化/反序列化過程。

問候 Nautious