我正在尝试确定如何访问我的JObject中的数据,但我一生都无法确定如何使用它。
JObject Object = (JObject)Response.Data["my_key"];
我可以将其打印到控制台执行Console.WriteLine(Object),然后我看到数据,它看起来像:
{
"my_data" : "more of my string data"
...
}
但是我不知道如何迭代/枚举它,有人有任何想法吗? 我现在很茫然。
如果您查看 JObject
的文档,您会发现它实现了IEnumerable<KeyValuePair<string, JToken>>
。因此,您只需使用foreach
对其进行迭代:
foreach (var x in obj)
{
string name = x.Key;
JToken value = x.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;
}
答案对我不起作用。我不知道它是如何获得这么多选票的。虽然它有助于为我指明一个方向。
这是对我有用的答案:
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 } );