2016-12-22 7 views
1

Ich muss eine XML-Datei deserialisieren. Bis jetzt war ich erfolgreich mit dem [XmlElement] Attribut. Es funktioniert großartig. Wo ich stolpere ist, wenn es um ein verschachteltes Element geht. Zum Beispiel <root><level1><set1><data1>x</data1><data2>y</data2></set1>.....</root> und ich möchte nur Daten2 innerhalb von Set 1 zu erfassen. Ich habe mit [XmlArray] und [XmlArrayItem] experimentiert, aber havent hatte viel Glück. Ich könnte falsch liegen, aber ich dachte nicht, eine Liste wäre angemessen, da ich nur einen Wert für das Klassenattribut möchte. Es gibt ein besseres Beispiel für mein Problem. Darin würde ich innerhalb von <H_DATA_1> mit der Erfassung das <NAME> Elements betroffen sein, die in <HEADER> verschachtelt ist, ich habe bei der Erfassung erfolgreich war, was ich von den ersten <METADATA> innerhalb von <PRODUCTION_SET> muß sowie ziehen, was ich aus dem <METADATA> 2. muß innerhalb von <PRODUCING_ENTITY> jedoch Meine Methoden scheinen nicht in der Lage zu sein, die zusätzliche Verschachtelung innerhalb des Header-Tags zu handhaben.C# - XML ​​mit verschachtelten Elementen mithilfe von Attributen deserialisieren

XML

<PRODUCTION_SET> 
    <METADATA> 
     <M_DATA_1>X</M_DATA_1> 
     <M_DATA_2>Y</M_DATA_2> 
     <M_DATA_3>Z</M_DATA_3> 
    </METADATA> 
    <PRODUCING_ENTITY> 
     <METADATA> 
      <PM_Data_1>X<PM_Data_1> 
      <PM_Data_2>Y<PM_Data_2> 
     </Metadata> 
     <HEADER> 
      <H_DATA_1> 
       <NAME>I NEED THIS NAME</NAME> 
      </H_DATA_1> 
      <H_DATA_2> 
       <NAME>I ALSO NEED THIS NAME</NAME> 
       <CODE>DO NOT WANT THIS CODE</CODE> 
      </H_DATA_2> 
      <H_DATA_3> 
       <NAME>I DO NOT NEED THIS NAME</NAME> 
      </H_DATA_3> 
     </HEADER> 
    </PRODUCING_ENTITY> 
    <PRODUCING_ENTITY> 
    . 
    . 
    . 
    </PRODUCING_ENTITY> 
. 
. 
. 
. 
</PRODUCING_SET> 

CLASS

[Serializable()] 
[XmlRoot("PRODUCTION_SET")] 
public class ProductionSet 
{ 
    [XmlElement("METADATA")] 
    public List<Metadata> Metadata { get; set; } 

    [XmlElement("PRODUCING_ENTITY")] 
    public List<Producing_Entity> ProducingEntity { get; set; } 

} 

public class Metadata 
{ 
    [XmlElement("M_DATA_1")] 
    public string mData1 { get; set; } 
    [XmlElement("M_DATA_2")] 
    public string mdata2 { get; set; } 
} 

public class Producing_Entity 
{ 
    [XmlElement("METADATA")] 
    public List<ProdMeta> ProdMeta { get; set; } 

    [XmlElement("HEADER")] 
    public List<Header> Header { get; set; } 


} 

public class ProdMeta 
{ 
    [XmlElement("PM_DATA_1")] 
    public string pmData1{ get; set; } 

} 


public class Header 
{ 
    [XmlElement("H_DATA1")] 
    [XmlElement("NAME")] 
    public string H_DATA1_Name { get; set; } 


    [XmlElement("H_DATA2")] 
    [XmlElement("NAME")] 
    public string H_DATA2_Name { get; set; } 


} 

Antwort

0

Sie werden einen Schritt mehr benötigen:


    public class Header 
    { 
     [XmlElement("H_DATA1")] 
     public H_DATA1 HData1 { get; set; } 

    .... 

    } 

    public class H_DATA1 { 

     [XmlElement("NAME")] 
     public String Name { get; {set; } 
    } 
+0

NICE! Ich wusste, dass ich etwas verpasst habe. Danke! – LCaraway

Verwandte Themen