2013-05-02 3 views
1

У меня есть XML, который выглядит примерно такКак десериализации различных 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 использовать с боссами и который использовать с рабочими, но даже если это так, я не могу найти, как это делается.

Итак, пожалуйста, просветите меня!

EDIT (solution): Что вы знаете, задавая вопрос, вызвали некоторые новые мысли, и я смог найти решение. Я отправлю его здесь, в случае, если кто-то будет искать с подобными проблемами:

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

Посмотрите на '' XmlArray' и XmlArrayItem' атрибуты –

+0

Быстрый способ это сделать новый список людей и добавить оба списка к этому – Sayse

+0

Пожалуйста, разместите свое решение в качестве ответа на свой вопрос и примите его. –

ответ

1

Решение:

[XmlElement(ElementName = "bosses", Type = typeof(Boss))] 
[XmlElement(ElementName = "workers", Type = typeof(Worker))] 
public List<Person> People { get; set; } 
Смежные вопросы