2014-01-10 43 views
0

只是一個人爲的例子,但我有一些類我想控制序列化時的名稱。序列化集合項時使用類型的根名稱

[XmlRoot("item")] 
public class ItemWrapper 
{ 
    [XmlArray("parts")] 
    public List<PartWrapper> Parts { get; set; } 
} 

[XmlRoot("part")] 
public class PartWrapper 
{ 
    [XmlAttribute("name")] 
    public string Name { get; set; } 
} 

現在,當我序列化有一些PartsItemWrapper,我期待每一個PartWrapper項目要使用root名稱("part")序列,但它不是使用類型的名稱(它會使用默認如果沒有指定XmlRootAttribute)。

<item> 
    <parts> 
    <PartWrapper name="foo" /> 
    <PartWrapper name="bar" /> 
    </parts> 
</item> 

現在我知道解決這個問題得到我想要的是在XmlArrayItemAttribute添加到Parts屬性來指定每個項目的名字,但我覺得它是多餘的。我只是想用我指定的類型根的名稱。

[XmlRoot("item")] 
public class Item 
{ 
    [XmlArray("parts")] 
    [XmlArrayItem("part", Type=typeof(PartWrapper))] 
    public List<PartWrapper> Parts { get; set; } 
} 

有沒有一種方法,我可以告訴大家,我想使用的根名稱爲藏品串行?如果是這樣,怎麼樣?

爲什麼不使用根名稱?它不應該有什麼好的理由?

這是我的理解,XmlRootAttribute允許您完全像XmlElementAttribute那樣命名元素,只有它必須應用於類。我想我錯了。

回答

2

從文檔,似乎XmlRootAttribute用於僅當元素是根(這就是爲什麼它適合你的情況「項目」):屬性目標作爲

控制XML序列化一個XML根元素

- MSDN

就像也許你想XmlTypeAttribute的事情是不是根在我看來。

+0

啊,所以我應該一直在使用'XmlType'。最長的時間,我認爲它只關聯了一個XSD數據類型或其他東西。我不知道在類型上實際設置了什麼名字,我一直認爲'XmlRootAttribute'是唯一的方法。 –

相關問題