You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将XML响应转换为List时Images节点解析出错,求解决方案

XML转List集合时Images节点映射问题解决方案

获取XML的代码

XElement Xml = null;
var apiResponse = response.Content.ReadAsStringAsync().Result;
Xml = Newtonsoft.Json.JsonConvert.DeserializeObject<XElement>(apiResponse);

得到的XML结构

<root>
  <Column1>
    <ID>2702</ID>
    <Desc>Failed</Desc>
    <Address>Florida</Address>
    <Date>2019-04-30T23:10:36.79</Date>
    <Images>
      <Image>
        <File>1-RRamos.PNG</File>
      </Image>
      <Image>
        <File>RRamos.PNG</File>
      </Image>
      <Image>
        <File>3-RRamos.PNG</File>
      </Image>
    </Images>
  </Column1>
</root>

修正后的实体类与转换逻辑

原代码在节点选择和Images映射上存在错误,以下是完整修正方案:

优化后的实体类

public class objClass
{
    public string ID { get; set; }
    public string Desc { get; set; }
    public string Address { get; set; }
    public DateTime? Date { get; set; }

    // 属性名改为Images,贴合XML结构语义
    public List<Image> Images { get; set; }
}

// 类名改为Image,对应XML中的单个<Image>节点
public class Image
{
    public string File { get; set; }
}

正确的Linq to XML转换代码

List<objClass> list = Xml.Elements("Column1")
    .Select(sv => new objClass()
    {
        ID = (string)sv.Element("ID"),
        Desc = (string)sv.Element("Desc"),
        Address = (string)sv.Element("Address"),
        Date = (DateTime?)sv.Element("Date"),
        // 从Images节点下遍历所有Image子节点,映射为List<Image>
        Images = sv.Element("Images")?
            .Elements("Image")
            .Select(img => new Image { File = (string)img.Element("File") })
            .ToList()
    })
    .ToList();

关键修正点

  • 节点选择错误:原代码遍历Xml.Elements("ID"),但ID是Column1的子节点,正确做法是遍历Xml.Elements("Column1")。
  • Images映射逻辑:通过sv.Element("Images")获取父节点,再遍历其下的Image子节点,逐个转换为Image对象并收集为List。
  • 实体类命名优化:调整类和属性名,让语义与XML结构对应,避免混淆。

内容的提问来源于stack exchange,提问作者user8435866

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:35:20