Linq to XML将XML文件转换为自定义对象

本文关键字:XML 自定义 转换 对象 文件 to Linq | 更新日期: 2023-09-27 18:12:53

我正在使用Linq to XML读取XML文件,作为其中的一部分,我想创建一个对象。我的对象是这样的:

    public class Address
    {
        public string AccountRef { get; set; }
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        // more stuff here
    }

我的XML文件是这样的:

<rows>
    <row>
      <FIELD NAME="AccountRef">1234</FIELD>
      <FIELD NAME="AddressLine1">My Address Line 1</FIELD>
      <FIELD NAME="AddressLine2">My Address Line 2</FIELD>
    </row>
    <row>
      <FIELD NAME="AccountRef">5678</FIELD>
      <FIELD NAME="AddressLine1">My Address Line 3</FIELD>
      <FIELD NAME="AddressLine2">My Address Line 4</FIELD>
    </row>
</rows>

在代码方面,我已经尝试了各种各样的东西,但目前我有以下的格式返回正确的行数:

<row><FIELD NAME="AccountRef">1234</FIELD><FIELD>...rest of data</row>
<row><FIELD NAME="AccountRef">5678</FIELD><FIELD>...rest of data</row>

执行此操作的代码是:

var results = (from d in document.Descendants("row")
               select d).ToList();

基本上我要做的是这样的:

var results = (from d in document.Descendants("row")
               select new Address
               {
                   AccountRef = d.Attribute("AccountRef").Value,
                   AddressLine1 = d.Attribute("AddressLine1").Value
               }).ToList();

显然,因为我的节点是相同的(FIELD NAME),不会工作,所以有人知道我如何才能实现这一点吗?

Linq to XML将XML文件转换为自定义对象

您需要在创建对象之前检索字段名称和值

var results = document.Descendants("row")
    .Select(row=>row.Elements("FIELD").ToDictionary(x=>x.Attribute("NAME").Value, x=>x.Value))
    .Select(d=>new Address 
       {                    
        AccountRef = d["AccountRef"],
        AddressLine1 = d["AddressLine1"],
        AddressLine2 = d["AddressLine2"],
       });

检查演示