【发布时间】:2014-01-27 14:04:02
【问题描述】:
只有在源 xml 中只有一个元素的集合时才会出错, 在第一个元素的示例中,我正确地获得了子元素(项目),但在第二个元素中只有一个子元素,因此代码抛出异常(无法访问 Newtonsoft.Json.Linq.JProperty 上的子值)
谢谢
JObject firstLevels = new JObject();
string sourceXML = "<Root>
<FirstLevel id=\"1\" name=\"1\">
<Item id=\"1\" name=\"1.1\" />
<Item id=\"2\" name=\"1.2\" />
</FirstLevel>
<FirstLevel id=\"2\" name=\"2\">
<Item id=\"1\" name=\"2.1\" />
</FirstLevel>
</Root>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(sourceXML);
XmlNodeList nodeList;
nodeList = xmlDoc.SelectNodes("Root/FirstLevel");
JArray jarray = new JArray();
foreach (XmlNode node in nodeList)
{
string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(node);
jarray.Add(JObject.Parse(json));
}
firstLevels["result"] = jarray;
foreach(var first in firstLevels["result"].Children<JObject>())
{
Console.WriteLine(first["FirstLevel"]["@name"].Value<string>());
foreach (var item in first["FirstLevel"]["Item"])
Console.WriteLine(" -- " + item["@name"].Value<string>());
}
【问题讨论】:
-
您可以使用辅助方法来处理这种情况。看我的回答here。