2017-04-11 2 views
1

Ich mag eine einfache XML-Datei zur Serialisierung zum Objekt:XML Serializer zum Objekt

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

Im Folgenden sind Klassen:

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

Liste der StaticGroup korrekt mit Name-Attribute erstellt.

Das Problem ist, dass Tabelle/s (TableName und TableTag) aus irgendeinem Grund nicht serialisiert sind. Was mache ich falsch?

Dank

Edit # 1 Danke Marc mit der Ausgabe # 1

Jetzt bin versucht, half ich StaticGroup in einer anderen 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> 

Deserialize arbeitet direkt mit Ausnahme hinzufügen verschachtelt erhält keine Daten aus XML

modifizierte StaticTablesGroup Klasse:

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

jedoch überprüfte ich Serialize, wie Marc vorgeschlagen, und es worksfine

Antwort

1

Sie sind bereits innerhalb<StaticGroup>, so dass Sie nicht [XmlArray("StaticGroup")] brauchen. Verwenden Sie stattdessen XmlElement auf der Liste, die sie jede Instanz <Table> als ein Element in der Liste, ohne ein Verpackungselement für die Liste verarbeiten, macht sich:

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

Danke für Ihnen helfen. ich möchte die XML ändern StaticGroup innerhalb StaticGroup I aufgenommen StaticTableGroup Klasse public class StaticTablesGroup modifizierte { ... [XmlArray ("StaticGroup")] [XmlArrayItem ("StaticGroup", typeof (StaticTablesGroup))] öffentliche Liste Untergruppe {get; einstellen; } } Untergruppen werden jedoch nicht deserialisiert. Was mache ich diesmal falsch? – Vadim

+0

@Vadim Profi-Tipp: Verwenden Sie 'Serialize' und schauen Sie, was es erzeugt; Vergleichen Sie das mit dem, was Sie wollten - das sollte Ihnen sagen, wo Sie suchen müssen. Schwer für mich, ohne ein vollständiges Beispiel zu kommentieren –

+0

Vielen Dank für den Tipp. Beim Serialisieren sieht das XML genau wie erwartet aus, aber das Zurücklesen funktioniert nicht. – Vadim

Verwandte Themen