链接到XML -反序列化到对象

本文关键字:对象 反序列化 XML 链接 | 更新日期: 2023-09-27 18:16:56

我已经能够让Linq到XML工作,但我想看看是否有一个更有效的方法将元素应用到对象,而不是在我遍历XML后放入foreach语句?我知道你可以用表达式,但不确定如何将它应用到这个或者是否可能?

非常感谢任何建议。

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;
}

链接到XML -反序列化到对象

选择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将是IEnumerable<Order>类型,但如果您需要列表:

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

使用以下代码替换您发布的代码

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();