如何将不同的xml标记反序列化为单个列表

时间:2013-05-02 18:38:49

标签: c# .net xmlserializer xml-deserialization

我的xml看起来像这样

<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>

以及一些看起来像这样的类

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        
}

现在,我想要做的是将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; }

1 个答案:

答案 0 :(得分:1)

解决方案:

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