使用LINQ将XML转换为对象时出错
本文关键字:对象 出错 转换 LINQ XML 使用 | 更新日期: 2023-09-27 18:21:21
我有这个xml:
<?xml version="1.0" encoding="utf-8"?>
<Packet>
<Header>
<Id>1234-1234-1234</Id>
</Header>
<Customers>
<Customer>
<Name>Try</Name>
<Age>20</Age>
</Customer>
</Customers>
</Packet>
这就是我将其转换为对象的方法:
XDocument xdoc = XDocument.Load(xml);
List<Customer> customers = (from customer in xdoc.Element("Customers").Element("Customer")
select new Customer
{
Name = customer.Element("Name").Value,
Age = customer.Element("Age").Value
}).ToList();
我的问题是,当我试图运行这段代码时,我得到了一个异常错误,说对象引用没有设置为实例。
但是当我把xml改成这样时:
<?xml version="1.0" encoding="utf-8"?>
<Customers>
<Customer>
<Name>Try</Name>
<Age>20</Age>
</Customer>
</Customers>
它开始工作,我得到了名字和年龄。但是,数据包和标头是我的xml文件的要求之一。我该怎么做?
编辑:感谢所有的解决方案!它们都在起作用,但我可以知道什么是最好的(最佳实践等)谢谢!
您可以使用Descendants()
方法在xml树中查找元素。
List<Customer> customers = (from customer in xdoc.Descendants("Customer")
select new Customer
{
Name = customer.Element("Name").Value,
Age = customer.Element("Age").Value
}).ToList();
将查询源更改为:
xdoc.Root.Element("Customers").Elements("Customer")
Element
方法查找当前级别上的元素,该元素是XDocument
的根。这就是查询不起作用的原因。
尝试将LINQ
查询更改为:
XDocument xdoc = XDocument.Load(xml);
List<Customer> customers = (from customer in xdoc.Element("Packet").Element("Customers").Element("Customer")
select new Customer
{
Name = customer.Element("Name").Value,
Age = customer.Element("Age").Value
}).ToList();
因为Customers
元素位于Packet
元素内部。