如何在JEnumerable <jtoken>对象中看到Children()。ToList()方法?</jtoken>

时间:2012-01-12 09:26:58

标签: c# json linq windows-phone-7 json.net

我尝试通过JSON.NET解析JSON,并且在App类中可以,但是如果我想在自定义类中使用write parse方法,则VS在ToList()对象中看不到方法JEnumerable<JToken>。 / p>

清单:

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'可以   找到(你错过了使用指令或汇编引用吗?)

2 个答案:

答案 0 :(得分:4)

您无需在此处使用ToList()

var results = newsResponse["NewsResponse"]["NewsItems"]["NewsItem"].Children(); 

这将产生一个可用于下面的foreach的Enumerable(懒惰)集合。

注意:我正在使用var,因为我不知道这里返回的确切类型,但我们并不真正关心它,它可能非常复杂,所以这非常有用。

答案 1 :(得分:2)

由于我无法对jv42的答案发表评论,因为我不喜欢匿名类型,所以我会基于他的答案。

如上所述,您不需要使用.ToList(),结果将变为JEnumerable,可以foreach通过:{/ p>

JEnumerable results = newsResponse["NewsResponse"]["NewsItems"]["NewsItem"].Children();

foreach( JToken result in results )
{
    Console.WriteLine(result.ToString());
}