Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将XML数据加载到数据结构中?_C#_.net_Linq_Asp.net Core - Fatal编程技术网

C# 如何将XML数据加载到数据结构中?

C# 如何将XML数据加载到数据结构中?,c#,.net,linq,asp.net-core,C#,.net,Linq,Asp.net Core,我有以下XML文档 <?xml version = "1.0" encoding = "utf-8"?> <flights_for_sale> <ad id="0001" createdon ="11/02/20" expireson="12/02/20"> <aircraft id="A10"> <

我有以下XML文档

<?xml version = "1.0" encoding = "utf-8"?>
<flights_for_sale>
  <ad id="0001" createdon ="11/02/20" expireson="12/02/20">
    <aircraft id="A10">
      <year> 1977 </year>
      <make> <![CDATA[&c;]]> </make>
      <model> Skyhawk </model>
      <color> Light blue and white </color>
      <description>
        New paint, nearly new interior,
        685 hours SMOH, full IFR King avionics
      </description>
      <price> 23,495 </price>      
    </aircraft>
    <seller id = "s001"  phone="123-123-123"> Skyway Aircraft </seller>
    <seller id = "s002"  phone="123-123-222"> Boeing </seller>
    <seller id = "s003"  phone="123-123-233"> McDouglas </seller>
    <membership id="1000" from="12/03/16" to="12/03/18" no="M0001">Silver</membership>
    <membership id="1000" from="12/03/16" to="12/03/18" no="M0002">Gold</membership>
    <membership id="1000" from="12/03/16" to="12/03/18" no="M0003">Platinum</membership>
    <location>
      <city> Rapid City, </city>
      <state> South Dakota </state>
    </location>
  </ad>
  <ad id="002" createdon ="11/05/20" expireson="12/05/20">
    <aircraft>
      <year> 1965 </year>
      <make> &amp;p; </make>
      <model> Cherokee </model>
      <color> Gold </color>
      <description>
        240 hours SMOH, dual NAVCOMs, DME,
        new Cleveland brakes, great shape
      </description>
    </aircraft>
    <seller phone="555-333-2222"  email="jseller@www.axl.com" id="s004">John Seller</seller>
    <membership id="1000" from="12/03/16" to="12/03/18" no="M0020">State Membership</membership>
    <membership id="1000" from="12/03/16" to="12/03/18" no="M0002">Gold</membership>
    <location>
      <city> St. Joseph, </city>
      <state> Missouri </state>
    </location>
  </ad>
</flights_for_sale>
然后,我编写了以下代码来读取XML上的元素/属性,并将数据填充到
Advert2
对象结构中

            var xmlPath2 = System.IO.Path.Combine("../../../data/" + "XMLFile2.xml");
            var xml2 = XDocument.Load(xmlPath2);
          var query2 = xml2.Root.Descendants("ad").Select(n => new Advert2 { 
                    Id = Convert.ToInt32(n.Parent.TryGetAttribtueValue("ad", "id")),
                    CreatedOn = Convert.ToDateTime( n.Parent.TryGetAttribtueValue("ad", "createdon") ),
                    ExpiresOn = Convert.ToDateTime(n.Parent.TryGetAttribtueValue("ad", "expireson")),
                    MyAircraft = new Aircraft {  
                        Make = n.TryGetElementValue("make"), 
                        Model = n.TryGetElementValue("model"), 
                        Description = n.TryGetElementValue("description"), 
                        Price = Convert.ToDecimal( n.TryGetElementValue("price") ) },
                    MySellers = new List<Seller2>().Add( new Seller2 {
                                                                        Id =  Convert.ToInt32( n.TryGetAttribtueValue("seller","id") ), 
                                                                        SellerName = n.TryGetElementValue("seller"),
                                                                        Phone = n.TryGetAttribtueValue("seller","phone")
                                                                        } )   
            }).ToList();
var xmlPath2=System.IO.Path.Combine(“../../../data/”+“XMLFile2.xml”);
var xml2=XDocument.Load(xmlPath2);
var query2=xml2.Root.substands(“ad”).Select(n=>newadvert2{
Id=转换为32(n.Parent.tryGetAttributeValue(“ad”、“Id”),
CreatedOn=Convert.ToDateTime(n.Parent.tryGetAttributeValue(“ad”,“CreatedOn”)),
ExpiresOn=Convert.ToDateTime(n.Parent.tryGetAttributeValue(“ad”,“ExpiresOn”)),
MyAircraft=新飞机{
Make=n.TryGetElementValue(“Make”),
模型=n.TryGetElementValue(“模型”),
Description=n.TryGetElementValue(“Description”),
Price=Convert.ToDecimal(n.TryGetElementValue(“Price”)),
MySellers=new List().Add(新卖家2{
Id=转换为32(n.tryGetAttributeValue(“卖方”,“Id”)),
SellerName=n.TryGetElementValue(“卖方”),
电话=n.tryGetAttributeValue(“卖方”、“电话”)
} )   
}).ToList();
但问题是,当我试图创建对象来填充
MySellers
List时,出现了语法错误

错误:

错误CS0029
无法将类型“void”隐式转换为System.Collections.Generic.List

所以我似乎不知道如何填充这两个集合
MySellers
MyMemberships


是否有其他方法来填充这两个集合,以便我可以创建
Averts2
集合?

我知道这不完全符合问题的精神。然而,它应该尽可能简单

var xmlStream = new StreamReader(@"D:\something.xml");
var serializer = new XmlSerializer(typeof(flights_for_sale));
var result = (flights_for_sale)serializer.Deserialize(xmlStream);
下面是通过将xml粘贴到VisualStudio中获得的


编辑以便基本上将XML反向工程为代码?真聪明!看起来我的文档结构有点异乎寻常,因为集合必须包含在其父集合标记中,就像所有卖方节点都必须包含在标记中一样。。。。但是他们再次强调,如果有一个文档没有遵循标准的结构……我认为我的文档应该采用非正统的样式:)@eutychostfar是的,我不太确定这是否能帮助您满足您的需要,好答案:)不管XML文档的结构如何,它都会生成数据
            var xmlPath2 = System.IO.Path.Combine("../../../data/" + "XMLFile2.xml");
            var xml2 = XDocument.Load(xmlPath2);
          var query2 = xml2.Root.Descendants("ad").Select(n => new Advert2 { 
                    Id = Convert.ToInt32(n.Parent.TryGetAttribtueValue("ad", "id")),
                    CreatedOn = Convert.ToDateTime( n.Parent.TryGetAttribtueValue("ad", "createdon") ),
                    ExpiresOn = Convert.ToDateTime(n.Parent.TryGetAttribtueValue("ad", "expireson")),
                    MyAircraft = new Aircraft {  
                        Make = n.TryGetElementValue("make"), 
                        Model = n.TryGetElementValue("model"), 
                        Description = n.TryGetElementValue("description"), 
                        Price = Convert.ToDecimal( n.TryGetElementValue("price") ) },
                    MySellers = new List<Seller2>().Add( new Seller2 {
                                                                        Id =  Convert.ToInt32( n.TryGetAttribtueValue("seller","id") ), 
                                                                        SellerName = n.TryGetElementValue("seller"),
                                                                        Phone = n.TryGetAttribtueValue("seller","phone")
                                                                        } )   
            }).ToList();
var xmlStream = new StreamReader(@"D:\something.xml");
var serializer = new XmlSerializer(typeof(flights_for_sale));
var result = (flights_for_sale)serializer.Deserialize(xmlStream);