C# LINQtoXML不返回任何结果

C# LINQtoXML不返回任何结果,c#,.net,xml,linq,linq-to-xml,C#,.net,Xml,Linq,Linq To Xml,我正在使用Linq解析XML,但它没有返回任何结果: XML: 城市 公司名称 代码: 公共类Merc { 公共字符串CompanyName{get;set;} } 使用(XmlReader=XmlReader.Create(新建StringReader(结果))) { XDocument doc=XDocument.Load(读卡器,LoadOptions.SetLineInfo); 列表m=(来自doc.substands(“downloadInfoReturn”)中的downloadI

我正在使用Linq解析XML,但它没有返回任何结果:

XML:


城市
公司名称
代码:

公共类Merc
{
公共字符串CompanyName{get;set;}
}
使用(XmlReader=XmlReader.Create(新建StringReader(结果)))
{
XDocument doc=XDocument.Load(读卡器,LoadOptions.SetLineInfo);
列表m=(来自doc.substands(“downloadInfoReturn”)中的downloadInfoReturn)
选择新Merc
{
CompanyName=downloadsmerchantinforeturn.Element(“CompanyName”).Value
}).ToList();
}

还有其他好方法吗?谢谢。

您的XML文件包含名称空间,因此在执行查询时需要指定名称空间:

XNamespace xn = "http://webService";
doc.Descendants(xn + "downloadInfoReturn")

因为在查询xml时缺少名称空间,而且类名不匹配,所以请尝试以下代码,它在我这方面起作用

 List<Merc> m = null;
 XNamespace ns = "http://webService";
 using (XmlReader reader = XmlReader.Create(new StringReader(result)))
      {
         XDocument doc = XDocument.Load(reader, LoadOptions.SetLineInfo);
         m = (from downloadInfoReturn in doc.Descendants(ns + "downloadInfoReturn")
                   select new Merc
                       {
                         CompanyName = downloadInfoReturn.Element(ns+ "companyName").Value
                        }).ToList<Merc>();
            }
    Console.WriteLine(m.Count); // this will show 1
List m=null;
XNS=”http://webService";
使用(XmlReader=XmlReader.Create(新建StringReader(结果)))
{
XDocument doc=XDocument.Load(读卡器,LoadOptions.SetLineInfo);
m=(来自文档子体中的downloadInfoReturn(ns+“downloadInfoReturn”)
选择新Merc
{
CompanyName=downloadInfoReturn.Element(ns+“CompanyName”).Value
}).ToList();
}
Console.WriteLine(m.Count);//这将显示1

注意:您正在做
新商户
,但您的类名为
Merc
。如果问题能够实际运行,则更容易发现和测试。谢谢。出现新错误:对象引用未设置为对象的实例。@KelvinFixx:在哪一行获得它?@KelvinFixx:将代码分成多行。你会看到的。什么类型的异常?是否为
NullReferenceException
?已解决将xn添加到此语句CompanyName=downloadmessartinforeturn.Element(xn+“CompanyName”)。Value@KelvinFixx:很高兴它起了作用!:)我投了反对票,因为没有人解释这到底是怎么回事。伊万在另一个问题上也是如此。他确实给了我回答我问题的线索。谢谢Habib。@Habib这是正确的,我相信它会有帮助,但你不会说你的更改会起什么作用。@Tharwen,我已经更新了我的答案,我认为缺少名称空间的问题是显而易见的,但我也添加了解释。这不明显,因为这样一来就不需要问这个问题了。不管怎样,你现在可以收回你的选票了。
XNamespace xn = "http://webService";
doc.Descendants(xn + "downloadInfoReturn")
 List<Merc> m = null;
 XNamespace ns = "http://webService";
 using (XmlReader reader = XmlReader.Create(new StringReader(result)))
      {
         XDocument doc = XDocument.Load(reader, LoadOptions.SetLineInfo);
         m = (from downloadInfoReturn in doc.Descendants(ns + "downloadInfoReturn")
                   select new Merc
                       {
                         CompanyName = downloadInfoReturn.Element(ns+ "companyName").Value
                        }).ToList<Merc>();
            }
    Console.WriteLine(m.Count); // this will show 1