Csharp/C#教程:使用LINQ的父/子Xml到DTO对象模型分享


使用LINQ的父/子Xml到DTO对象模型

鉴于以下DTO定义:

[Serializable] internal class OrderCollection : List { } [Serializable] internal class Order { public string OrderId { get; set; } public OrderDetailCollection OrderDetails { get; set; } } [Serializable] internal class OrderDetailCollection : List { } [Serializable] internal class OrderDetail { internal OrderDetail() { } /*public string ParentOrderId { get; set; }*/ public string ItemName { get; set; } public int Quantity { get; set; } } 

和以下xml:

                    

有没有办法填充整个对象模型(导致一个类型为OrderCollection的对象使用Linq …..并在“一次通过”?

这就是我所拥有的……..(我可以填写“订单”)……但不确定如何让孩子们? 或者我必须接受2次传球,然后“匹配它们”?

  XDocument xDoc = XDocument.Load(fullFileName); //XNamespace ns = XNamespace.Get("https://schemas.microsoft.com/developer/msbuild/2003"); string ns = string.Empty; List lineItems = new List ( from list in xDoc.Descendants(ns + "orders") from item in list.Elements(ns + "order") where item != null select new Order { OrderId = item.Attribute("orderId") == null ? string.Empty : item.Attribute("orderId").Value } ); OrderCollection returnCollection = new OrderCollection(); returnCollection.AddRange(lineItems); 

试试这个:

 internal class OrderDetailCollection : List { internal OrderDetailCollection() {} internal OrderDetailCollection(IEnumerable src) { AddRange(src); } } List lineItems = new List ( from list in xDoc.Descendants(ns + "orders") from item in list.Elements(ns + "order") where item != null select new Order { //note that the cast is simpler to write than the null check in your code //https://msdn.microsoft.com/en-us/library/bb387049.aspx OrderId = (string)item.Attribute("orderId"), OrderDetails = new OrderDetailCollection( from detail in item.Descendants("orderDetail") select new OrderDetail { ItemName = (string)detail.Attribute("itemName"), Quantity = (int)detail.Attribute("quantity") } ) } ); 

如果您不需要集合的单独类,并且可以使用ListList ,那么您可以这样做:

上述就是C#学习教程:使用LINQ的父/子Xml到DTO对象模型分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 List lineItems = new List ( from list in xDoc.Descendants(ns + "orders") from item in list.Elements(ns + "order") where item != null select new Order { OrderId = (string)item.Attribute("orderId"), OrderDetails = ( from detail in item.Descendants("orderDetail") select new OrderDetail { ItemName = (string)detail.Attribute("itemName"), Quantity = (int)detail.Attribute("quantity") } ).ToList() } ); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1018307.html

(0)
上一篇 2022年1月3日
下一篇 2022年1月3日

精彩推荐