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),不会工作,所以有人知道我如何才能实现这一点吗?
您需要在创建对象之前检索字段名称和值
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"],
});
检查演示