如何在 JEnumerable<JToken> 对象中查看 Children().ToList() 方法?
Posted
技术标签:
【中文标题】如何在 JEnumerable<JToken> 对象中查看 Children().ToList() 方法?【英文标题】:How to see Children().ToList() method in JEnumerable<JToken> object? 【发布时间】:2012-02-08 14:23:04 【问题描述】:我尝试通过 JSON.NET 解析 JSON 并且在 App 类中是可以的,但是如果我想在自定义类中编写解析方法,VS 在 JEnumerable<JToken>
对象中看不到方法 ToList()
。
上市:
JObject newsResponse = JObject.Parse(e.Result);
IList<JToken> results = newsResponse["NewsResponse"]["NewsItems"]["NewsItem"].Children().ToList(); //Here don't see ToList()
List<News> newsResults = new List<News>();
foreach (JToken result in results)
News searchResult = JsonConvert.DeserializeObject<News>(result.ToString());
newsResults.Add(searchResult);
错误:
'Newtonsoft.Json.Linq.JEnumerable' 确实 不包含“ToList”的定义,也没有扩展方法“ToList” 接受类型的第一个参数 'Newtonsoft.Json.Linq.JEnumerable' 可以 被发现(您是否缺少 using 指令或程序集引用?)
【问题讨论】:
为什么需要ToList()
?也许您可以将IList<JToken>
替换为var
并删除ToList()
。
我会把它作为答案发布然后:)
【参考方案1】:
你不需要在这里使用ToList()
。
var results = newsResponse["NewsResponse"]["NewsItems"]["NewsItem"].Children();
这将生成一个可与下面的foreach
一起使用的可枚举(惰性)集合。
注意:我使用 var 是因为我不知道这里返回的确切类型,但我们并不真正关心它,而且它可能相当复杂,所以它真的很有用。
【讨论】:
【参考方案2】:由于我无法对 jv42 的回答发表评论,而且我不喜欢匿名类型,所以我会在他的回答的基础上再做一点。
你应该不需要像上面提到的那样使用.ToList()
,结果会变成一个JEnumerable
,可以通过foreach
'ed through:
JEnumerable results = newsResponse["NewsResponse"]["NewsItems"]["NewsItem"].Children();
foreach( JToken result in results )
Console.WriteLine(result.ToString());
【讨论】:
var
与匿名类型有很大不同,它只是一个关键字告诉编译器为您填写类型,您仍然使用静态类型并且表达式的类型没有改变(没有转换或任何东西)。以上是关于如何在 JEnumerable<JToken> 对象中查看 Children().ToList() 方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON 字符串转换为 C# IEnumerable<JToken>
如何从 Newton.Json.Linq.JToken 转换为 byte[]?
如何使用 JSON 路径获取 JSON 字符串的一部分而不是 JToken?