简体   繁体   English

Linq to XML-反序列化到对象

[英]Linq to XML - Deserialize to Object

I have been able to get Linq to XML to work, but I wanted to see if there was a more efficient way of applying the elements to an object rather then putting a foreach statement after I have traversed the xml? 我已经能够使Linq到XML正常工作,但是我想看看是否有一种更有效的方法将元素应用于对象,而不是在遍历xml之后放一个foreach语句? I know you can use lamba expressions, but not sure how to apply that to this or if that is possible? 我知道您可以使用lamba表达式,但是不确定如何将其应用于此,或者如果可能的话?

Any suggestions greatly appreciated. 任何建议,不胜感激。

List<Order> myOrders = new List<Order>();

var orders = from order in xdoc.Descendants("Order")
             select new{
                  OrderNumber = order.Element("OrderNumber").Value,
                  OrderDate = order.Element("OrderDate").Value,
                  OrderTotal = order.Element("OrderTotal").Value
             };

foreach(var ord in orders)
{
   myOrders.OrderNumber = ord.OrderNumber;
   myOrders.OrderDate = ord.OrderDate;
   myOrders.OrderTotal = ord.OrderTotal;
}

Simply select Order instances: 只需选择Order实例:

var orders = from order in xdoc.Descendants("Order")
             select new Order {
                  OrderNumber = order.Element("OrderNumber").Value,
                  OrderDate = order.Element("OrderDate").Value,
                  OrderTotal = order.Element("OrderTotal").Value
             };

orders will be of type IEnumerable<Order> , but if you need a list: orders的类型为IEnumerable<Order> ,但是如果您需要一个列表:

List<Order> myOrders = orders.ToList();

use the following as replacement for the code you posted 使用以下内容代替您发布的代码

List<Order> myOrders = (from order in xdoc.Descendants("Order")
                        select new Order {
                        OrderNumber = order.Element("OrderNumber").Value,
                        OrderDate = order.Element("OrderDate").Value,
                        OrderTotal = order.Element("OrderTotal").Value
                        }).ToList();
List<Order> myOrders = new List<Order>();

var orders = xdoc.Descendants("Order").Select(x=> new Order{ 
    OrderNumber = x.Element("OrderNumber").Value,
    OrderDate = x.Element("OrderDate").Value,
    OrderTotal = x.Element("OrderTotal").Value
    });

myOrders.AddRange(orders) // or just orders.ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM