将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
相关产品推荐
相关产品推荐

