2015-02-24 52 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反序列化到這個對象?我卡在的是如何聲明TaskCollectionTaskList,因此它們被填充爲<Tasks> & <Task>對象。

由於此項目的其他限制,我無法簡單地將TaskCollection作爲CustomTab中的List對象。

我知道,如果TaskCollection是CustomTab下,列出以下將工作:

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

參見[這個答案](http://stackoverflow.com/a/608181/1997232)'。 – Sinatr 2015-02-24 13:14:32

回答

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