2016-12-22 5 views
1

Мне нужно десериализовать XML-файл. До сих пор я успешно использовал атрибут [XmlElement]. Он отлично работает. Там, где я спотыкаюсь, это когда речь идет о вложенном элементе. Например, <root><level1><set1><data1>x</data1><data2>y</data2></set1>.....</root>, и я только хочу захватить data2 внутри набора 1. Я экспериментировал с [XmlArray] и [XmlArrayItem], но havent повезло. Я мог ошибаться, но я не думал, что список будет уместным, так как мне нужно только одно значение для атрибута класса. Ниже приведен пример, более конкретный для моей проблемы. В ней я бы обеспокоен захватывая <NAME> элемент внутри <H_DATA_1>, который вложен в <HEADER> я был успешным в захвате, что мне нужно от 1-го <METADATA> внутри <PRODUCTION_SET>, а также вытягивать то, что мне нужно от второго <METADATA> внутри <PRODUCING_ENTITY> однако мои методы, похоже, не способны обрабатывать дополнительное вложение внутри тега заголовка.C# - десериализация XML с вложенными элементами с использованием атрибутов

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> 

КЛАСС

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


} 

ответ

0

Вам нужно будет еще один шаг:


    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! Я знал, что у меня что-то не хватает. Спасибо! – LCaraway

 Смежные вопросы

  • Нет связанных вопросов^_^