Answers:
如果您查看有关的文档JObject,将会发现它实现了IEnumerable<KeyValuePair<string, JToken>>。因此,您可以使用以下命令简单地对其进行迭代foreach:
foreach (var x in obj)
{
string name = x.Key;
JToken value = x.Value;
…
}
obj为type JObject; 但JObject似乎有类似的问题dynamic。编译器无法将类型参数推断为.Select。我可以显式地给他们,obj.Select<KeyValuePair<string, JToken>, (result type)>(...)也对我的作品
JObject实现IEnumerable<KeyValuePair<string, JToken>>和和IEnumerable<JToken>(通过间接实现JContainer)。
JToken value来遍历下一组对?
JObjects可以通过列举JProperty对象通过它投射到JToken:
foreach (JProperty x in (JToken)obj) { // if 'obj' is a JObject
string name = x.Name;
JToken value = x.Value;
}
如果在另一个JObject内有嵌套的JObject,则不需要强制转换,因为访问器将返回JToken:
foreach (JProperty x in obj["otherObject"]) { // Where 'obj' and 'obj["otherObject"]' are both JObjects
string name = x.Name;
JToken value = x.Value;
}
obj.Properties().Select(p => p.Name + ": " + p.Value)。
答案对我不起作用。我不知道它怎么得到这么多票。尽管它帮助我指明了方向。
这是对我有用的答案:
foreach (var x in jobj)
{
var key = ((JProperty) (x)).Name;
var jvalue = ((JProperty)(x)).Value ;
}
对于像我这样的linq上瘾者,并根据 svick的回答,这里采用linq方法:
using System.Linq;
//...
//make it linq iterable.
var obj_linq = Response.Cast<KeyValuePair<string, JToken>>();
现在您可以使linq表达式如下:
JToken x = obj_linq
.Where( d => d.Key == "my_key")
.Select(v => v)
.FirstOrDefault()
.Value;
string y = ((JValue)x).Value;
要不就:
var y = obj_linq
.Where(d => d.Key == "my_key")
.Select(v => ((JValue)v.Value).Value)
.FirstOrDefault();
或用这个遍历所有数据:
obj_linq.ToList().ForEach( x => { do stuff } );
((IEnumerable<KeyValuePair<string, JToken>>)obj).Select(...)而不是普通人obj.Select(...);至少这就是我在代码中找到的一部分。