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