你调用的对象是空的。试图将XML放入List中

时间:2014-03-27 11:38:56

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

我必须遵循XML代码,我想将其转换为带有键和值的List:

<?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字符串。

现在我收到以下错误,我无法弄清楚原因: &#34;对象引用未设置为对象的实例。&#34;

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

2 个答案:

答案 0 :(得分:3)

"root"是您的aValues元素。因此,"root"的子项中没有aValue个元素,而aValues.Element("root")会为您提供null

正确查询:

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

答案 1 :(得分:1)

而不是Element("root").Elements()只使用aValues.Descendants()。在这种情况下,aValues已经是您的根元素。您正在root内寻找root所以它返回null。顺便说一句,您可以使用Dictionary代替List<KeyValuePair<string, object>>

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