如何使用 XmlSerializer 类对象将具有相同名称的 2 个子元素组合成单个属性是 C#

Posted

技术标签:

【中文标题】如何使用 XmlSerializer 类对象将具有相同名称的 2 个子元素组合成单个属性是 C#【英文标题】:How to combine 2 child elements with identical name into single property using XmlSerializer class objects is C# 【发布时间】:2021-02-19 04:36:08 【问题描述】:

我正在读取 XML 文件数据,问题是我想结合这个:

- <FIELD>
   <FIELD-TYPE>9999</FIELD-TYPE> 
   <FIELD-TEXT>Cash 538,64</FIELD-TEXT> 
  </FIELD>
- <FIELD>
   <FIELD-TYPE>119</FIELD-TYPE> 
   <FIELD-AMOUNT>538.64</FIELD-AMOUNT> 
  </FIELD>

在像这样的单个对象属性中:

[XmlElement("FIELD-TEXT")]
    public string FieldText  get; set; 

[XmlElement("FIELD-AMOUNT")]
    public string FieldAmount  get; set; 

目前我可以分别读取每个父元素,这给了我这个:

是否可以以某种方式配置 XmlSerializer 或对象? 我还考虑过添加另一个属性,以某种方式使用 LINQ 组合这些属性。

预计需要如下所示:

没有尝试过 XmlSerializer 对象配置,因为我是新手,不知道从哪里开始。

任何帮助将不胜感激。

【问题讨论】:

您能否详细说明预期的内容以及您尝试的内容 xml的生成大致类似于对象结构;如果您想要显着不同的 xml 输出:您将需要不同的 xml 结构。所以不:你不能轻易地让它从一个对象生成多个级别的 xml @KrishnaMuppalla 我用输出图像更新了我的问题,对象数据应该是什么样子。 【参考方案1】:

希望这有助于联系两个领域

var list1 =  doc.Descendants("FIELD-TEXT").Concat(doc.Descendants("FIELD-AMOUNT")).InDocumentOrder();            

foreach (var item in list1)

    Console.WriteLine(item);

【讨论】:

以上是关于如何使用 XmlSerializer 类对象将具有相同名称的 2 个子元素组合成单个属性是 C#的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XmlSerializer 序列化内部类?

如何找出类是不是具有 DataContract 属性?

如何让 XmlSerializer 将布尔值编码为是/否?

如何通过对 XmlSerializer.Serialize 的调用创建 XmlNode?

使用 XmlSerializer 时如何向 XML 文件写入注释?

如何告诉 XmlSerializer 总是用 [DefautValue(...)] 序列化属性?