2013-05-02 48 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; }