为什么不能在JObject上使用LINQ方法?

Newtonsoft.Json.Linq.JObject实现了IEnumerable ,而不是显式实现,但为什么不能这样做:

 using System.Linq; ... var jobj = new JObject(); var xxx = jobj.Select(x => x); //error foreach(var x in jobj) { } //no error 

为什么? 谢谢。

JObject实现IEnumerable>IEnumerable (通过inheritance自JContainer )。

因此,您不能直接使用LINQ(例如Select ),因为它不知道哪些“枚举”可以“扩展”。

因此你需要先施展:

 ((IEnumerable>) jobj).Select(x => x) 

要么:

 jobj.Cast>().Select(x => x) 

或者@Evk指出:

 jobj.Select((KeyValuePair x) => x)