2013-05-02 43 views
1

我有XML,看起來像這個樣子如何反序列化不同的XML標籤到一個列表

public class Person 
{ 
    //properties common to both bosses and workers 
} 

public class Boss : Person 
{ 
    //some properties unique for bosses 
} 

public class Worker : Person 
{ 
    //some properties unique for workers   
} 

現在這個

<root> 
    <bosses> 
     <boss>..some elements..</boss> 
     <boss>..some elements..</boss> 
    </bosses> 
    <workers> 
     <worker>..some elements..not the same as bosses</worker> 
     <worker>..some elements..</worker> 
    </workers> 
</root> 

和幾個班,我會喜歡做的是將xml反序列化成一個List<Person>,但坦率地說,我很難說如何做到這一點。

我可以通過做

[XmlElement("bosses")] 
    public List<Boss> Bosses { get; set; } 

    [XmlElement("workers")] 
    public List<Worker> Workers { get; set; } 

我試着做這個

[XmlElement("bosses")] 
    [XmlElement("workers")] 
    public List<Person> People { get; set; } 

天真地將它們結合起來,但它沒有得到老闆和工人單獨的列表。如果我必須猜測的話,那就是我必須告訴dezerializer Person的哪個子類用於老闆,哪些與工人一起使用,但即使如此,我似乎也不知道如何完成。

所以,請賜教!

編輯(解決方案):你知道什麼,問這個問題引發了一些新的想法,我能夠找出解決方案。我將它張貼在這裏,以防別人來尋找類似問題:

[XmlElement(ElementName = "bosses", Type = typeof(Boss))] 
    [XmlElement(ElementName = "workers", Type = typeof(Worker))] 
    public List<Person> People { get; set; } 
+0

在'XmlArray'看一看,'XmlArrayItem'屬性 – 2013-05-02 18:40:53

+0

快速的方法是使一個新的人名單,並將這兩個名單添加到此 – Sayse 2013-05-02 18:41:29

+0

請發佈您的解決方案作爲您的問題的答案,並接受它。 – 2013-05-02 19:09:46

回答

1

解決方案:

[XmlElement(ElementName = "bosses", Type = typeof(Boss))] 
[XmlElement(ElementName = "workers", Type = typeof(Worker))] 
public List<Person> People { get; set; }