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

时间:2015-09-15 13:20:58

标签: c# xml linq

我正在使用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)不起作用,所以有人知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

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

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"],
       });

检查demo