【发布时间】:2009-11-08 22:37:38
【问题描述】:
目前我的代码结构使用XmlDocument加载Xml数据,然后SelectNodes遍历一个重复项列表。
对于每个元素,我使用XmlNode.SelectSingleNode 来挑选字段元素。
我现在想使用 JSON.NET 来获得与作为 JSON 交付给我的文档相同的结果。答案可以不是 JSON.net,只要它是 C# 可集成的。
【问题讨论】:
目前我的代码结构使用XmlDocument加载Xml数据,然后SelectNodes遍历一个重复项列表。
对于每个元素,我使用XmlNode.SelectSingleNode 来挑选字段元素。
我现在想使用 JSON.NET 来获得与作为 JSON 交付给我的文档相同的结果。答案可以不是 JSON.net,只要它是 C# 可集成的。
【问题讨论】:
Json.NET 有 SelectToken。它使用类似于 DataBinder.Eval 的语法通过字符串表达式获取 JSON:
JObject o = JObject.Parse("{'People':[{'Name':'Jeff'},{'Name':'Joe'}]}");
// get name token of first person and convert to a string
string name = (string)o.SelectToken("People[0].Name");
或者如果您想选择多个值:
JObject o = JObject.Parse("{'People':[{'Name':'Jeff','Roles':['Manager', 'Admin']}]}");
// get role array token of first person and convert to a list of strings
IList<string> names = (string)o.SelectToken("People[0].Roles").Select(t => (string)t).ToList();
【讨论】:
JToken.GetValue("something", StringComparison.OrdinalIgnoreCase)?
您有可以映射 JSON 的对象层次结构吗?您可以创建一个对象树(即反序列化 JSON),并使用 LINQ 的 Where、SelectMany 等。
【讨论】: