gpt4 book ai didi

c# - 使用属性反序列化带有嵌套元素的 XML

转载 作者:太空宇宙 更新时间:2023-11-03 12:35:23 26 4
gpt4 key购买 nike

我需要反序列化一个 XML 文件。到目前为止,我已成功使用 [XmlElement]属性。它很好用。我绊倒的地方是涉及嵌套元素。例如<root><level1><set1><data1>x</data1><data2>y</data2></set1>.....</root>我只希望在集合 1 中捕获数据 2。我已经尝试过 [XmlArray] 和 [XmlArrayItem] 但运气不佳。我可能是错的,但我认为 List 不合适,因为我只想要一个类属性值。下面有一个更好的例子更具体地针对我的问题。在其中我会关心捕获 <NAME> <H_DATA_1> 内的元素嵌套在 <HEADER> 中我已经成功地从第一个 <METADATA> 捕获了我需要的东西<PRODUCTION_SET> 内部以及从第二个 <METADATA> 中提取我需要的东西<PRODUCING_ENTITY> 内部但是我的方法似乎无法处理 header 标记内的额外嵌套。

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


}

最佳答案

你还需要一步:

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

public class H_DATA1
{
[XmlElement("NAME")]
public String Name { get; set; }
}

关于c# - 使用属性反序列化带有嵌套元素的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com