2017-04-11 60 views
1

我想序列化簡單的XML文件爲對象:XML序列反對

<?xml version="1.0"?> 

-<Tables> 


-<StaticGroups> 


-<StaticGroup Name="111"> 


-<Table> 

<TableName>Table1 Name</TableName> 

<TableTag>Table1 Tag</TableTag> 

</Table> 


-<Table> 

<TableName>Table2 Name</TableName> 

<TableTag>Table2 Tag</TableTag> 

</Table> 

</StaticGroup> 


-<StaticGroup> 


-<Table> 

<TableName>Table3 Name</TableName> 

<TableTag>Table3 Tag</TableTag> 

</Table> 

</StaticGroup> 

</StaticGroups> 

</Tables> 

下面是類:

[XmlRoot("Tables")] 
    public class TablesXML 
    { 
     public TablesXML() 
     { 
      StaticTablesGroups = new List<StaticTablesGroup>(); 
     } 


     [XmlArray("StaticGroups")] 
     [XmlArrayItem("StaticGroup", typeof(StaticTablesGroup))] 
     public List<StaticTablesGroup> StaticTablesGroups { get; set; } 

    } 

    public class StaticTablesGroup 
    { 
     public StaticTablesGroup() 
     { 
      GroupTables = new List<GroupTable>(); 
     } 

     [XmlAttribute("Name")] 
     public string Name { get; set; } 

     [XmlArray("StaticGroup")] 
     [XmlArrayItem("Table", typeof(GroupTable))] 
     public List<GroupTable> GroupTables { get; set; } 
    } 


    public class GroupTable 
    { 

     [XmlElement("TableName")] 
     public string Name { get; set; } 
     [XmlElement("TableTag")] 
     public string Tag { get; set; } 
    } 

StaticGroup的名單正確地與Name屬性創建。

問題是Table/s(TableName和TableTag)由於某種原因未被序列化。我究竟做錯了什麼?

感謝

編輯#1 謝謝你馬克幫助與問題#1

現在我想要添加StaticGroup中另一個StaicGroup

-<Tables> 


-<StaticGroups> 


-<StaticGroup Name="111"> 


-<Table> 

<TableName>Table1 Name</TableName> 

<TableTag>Table1 Tag</TableTag> 

</Table> 
-<StaticGroup Name="111.1"> 


-<Table> 

<TableName>Table1.1 Name</TableName> 

<TableTag>Table1.1 Tag</TableTag> 

</Table> 
</StaticGroup> 
</StaticGroup> 

反序列化作品的權利除外嵌套不會從XML獲取數據

修改StaticTablesGroup類:

public class StaticTablesGroup 
    { 
     public StaticTablesGroup() 
     { 
      GroupTables = new List<GroupTable>(); 
      StaticTablesGroups = new List<StaticTablesGroup>(); 
     } 

     [XmlAttribute("Name")] 
     public string Name { get; set; } 

     //[XmlArray("StaticGroup")] 
     [XmlElement("Table", typeof(GroupTable))] 
     public List<GroupTable> GroupTables { get; set; } 



     [XmlElement("StaticGroup", typeof(StaticTablesGroup))] 
     public List<StaticTablesGroup> StaticTablesGroups { get; set; }   
    } 

不過,我查了序列化,正如馬克建議,並worksfine

回答

1

您已經<StaticGroup>,所以你不需要[XmlArray("StaticGroup")]。相反,列表,這使得它處理的<Table>每個實例在列表中的項目上使用XmlElement,沒有包裝元素列表本身:

[XmlElement("Table")] 
public List<GroupTable> GroupTables { get; set; } 
+0

謝謝你的幫助。我想更改XML包括StaticGroup中StaticGroup的我改性StaticTableGroup類公共類StaticTablesGroup { ... [XmlArray( 「StaticGroup的」)] [XmlArrayItem( 「StaticGroup的」 的typeof(StaticTablesGroup))] public List SubGroup {get;組; } }但是,子組不是反序列化的。我這次做錯了什麼 – Vadim

+0

@Vadim專家提示:使用'Serialize'並看看它產生了什麼;將它與你想要的相比 - 應該告訴你在哪裏看。很難讓我評論沒有一個完整的例子 –

+0

謝謝你的提示。當序列化XML看起來和預期完全一樣時,但回讀不起作用。 – Vadim