2015-02-24 3 views
0

У меня есть следующий XML:Как десериализовать этот XML (список внутри класса)?

<CustomTabsConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <CustomTab> 
    <Header>555</Header> 
    <TabIsVisible>true</TabIsVisible> 
    <Tasks> 
     <Task> 
     <TaskLabel>Task 23</TaskLabel> 
     <ButtonLabel /> 
     <ButtonType /> 
     <TaskParameters /> 
     </Task> 
     <Task> 
     <TaskLabel>Task 22</TaskLabel> 
     <ButtonLabel /> 
     <ButtonType>CrystalReports</ButtonType> 
     </Task> 
     <Task> 
     <TaskLabel>Task 21</TaskLabel> 
     <ButtonLabel /> 
     <ButtonType /> 
     <TaskParameters /> 
     </Task> 
    </Tasks> 
    </CustomTab> 
</CustomTabInfo> 

Мне нужна десериализация это в следующем объект (упрощенный для ясности):

// #################################################### 
// CustomTab Model 
// #################################################### 
[XmlRoot("CustomTab")] 
public class CustomTab 
{ 
    public CustomTab() 
    { 
    } 

    [XmlElement("Header")] 
    public String Header { get; set; } 

    [XmlElement("TabIsVisible")] 
    public Boolean TabIsVisible { get; set; } 

    [XmlIgnore] 
    public TaskCollection TaskCollection { get; set; } 
} 



// #################################################### 
// TaskCollection Model 
// #################################################### 
public class TaskCollection 
{ 
    public TaskCollection() 
    { 
     TaskList = new List<UtilitiesTask>(); 
    } 

    public List<UtilitiesTask> TaskList { get; set; } 
} 

// #################################################### 
// UtilitiesTask Model 
// #################################################### 
public class UtilitiesTask 
{ 
    public UtilitiesTask() 
    { 

    } 

    [XmlElement("TaskLabel")] 
    public String TaskLabel { get; set; } 

    [XmlElement("ButtonLabel")] 
    public String ButtonLabel { get; set; } 

    [XmlElement("ButtonType")] 
    public TaskButtonTypeEnums? ButtonType { get; set; } 
} 

Как я могу получить этот XML для десериализации в этот объект? Я застрял в том, как объявить TaskCollection и TaskList, поэтому они заполнены <Tasks> & <Task> объектов.

Я не могу просто сделать TaskCollection объектом List в CustomTab из-за некоторых других ограничений для этого проекта.

Я знаю, что следующий будет работать, если TaskCollection были списка под CustomTab:

[XmlArray("Tasks")] 
[XmlArrayItem("Task", typeof(UtilitiesTask))] 
public List<UtilitiesTask> TaskList { get; set; } 
+0

См [этот ответ] (http://stackoverflow.com/a/608181/1997232) относительно '' Список . – Sinatr

ответ

2

Благодаря Sinatr для указывая мне на соответствующей должности. Я решил мою проблему, изменив следующие пункты:

//[XmlIgnore] - removed this line and added the next line 
[XmlElement("Tasks")] 
public TaskCollection TaskCollection { get; set; } 



[XmlElement("Task", typeof(UtilitiesTask))] 
public List<UtilitiesTask> TaskList { get; set; } 
Смежные вопросы