【问题标题】:Object reference not set to an instance of an object. Trying to put XML into a List你调用的对象是空的。试图将 XML 放入列表
【发布时间】:2014-03-27 11:38:55
【问题描述】:

我必须遵循 XML 代码,我喜欢将其转换为带有键和值的列表:

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<root>
<command>getClient</command>
<id>10292</id>
</root>

我的 C# 代码是这样的:

XElement aValues = XElement.Parse(sMessage);
List<KeyValuePair<string, object>> oValues = aValues.Element("root").Elements().Select(e => new KeyValuePair<string, object>(e.Name.ToString(), e.Value)).ToList();

sMessage 是 XML 字符串。

现在我收到以下错误,我不知道为什么: “对象引用未设置为对象的实例。”

有人可以帮帮我吗?提前致谢!

【问题讨论】:

  • 您的一个对象为空。使用调试器查看异常在哪一行,然后检查每个值是否为空

标签: c# xml linq-to-xml xelement


【解决方案1】:

"root" 是您的 aValues 元素。所以,aValue 的子元素中没有 "root" 元素,aValues.Element("root") 给你null

正确查询:

 aValue.Elements()
       .Select(e => new KeyValuePair<string, object>(e.Name.LocalName, e.Value))
       .ToList();

【讨论】:

    【解决方案2】:

    只需使用aValues.Descendants() 而不是Element("root").Elements()。在这种情况下,aValues 已经是您的根元素。您正在寻找root 内部的root,因此它返回null。顺便说一句,您可以使用Dictionary 而不是List&lt;KeyValuePair&lt;string, object&gt;&gt;

    var oValues = aValues.Descendants()
                .ToDictionary(x => x.Name, x => (object) x);
    

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 2011-04-15
      • 2013-05-27
      • 2013-07-22
      相关资源
      最近更新 更多