Gee*_*esu 101 c# json json.net
我正在尝试确定如何访问我的JObject中的数据,而我无法确定如何使用它.
JObject Object = (JObject)Response.Data["my_key"];
Run Code Online (Sandbox Code Playgroud)
我可以将它打印到控制台上做Console.WriteLine(对象),我看到数据,它看起来像:
{
"my_data" : "more of my string data"
...
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过迭代/枚举,任何人有任何想法?我现在正处于亏损状态.
svi*_*ick 156
如果您查看文档JObject
,您将看到它实现IEnumerable<KeyValuePair<string, JToken>>
.因此,您可以使用以下命令迭代它foreach
:
foreach (var x in obj)
{
string name = x.Key;
JToken value = x.Value;
…
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*iel 48
JObjects可以通过列举JProperty对象通过它投射到JToken:
foreach (JProperty x in (JToken)obj) { // if 'obj' is a JObject
string name = x.Name;
JToken value = x.Value;
}
Run Code Online (Sandbox Code Playgroud)
如果你在另一个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;
}
Run Code Online (Sandbox Code Playgroud)
jax*_*xbo 13
答案对我不起作用.我不知道它是如何得到这么多的选票.虽然它帮助我指明了方向.
这个答案对我有用:
foreach (var x in jobj)
{
var key = ((JProperty) (x)).Name;
var jvalue = ((JProperty)(x)).Value ;
}
Run Code Online (Sandbox Code Playgroud)
对于像我这样的linq 上瘾者,根据 svick 的回答,这里有一个 linq 方法:
using System.Linq;
//...
//make it linq iterable.
var obj_linq = Response.Cast<KeyValuePair<string, JToken>>();
Run Code Online (Sandbox Code Playgroud)
现在您可以创建 linq 表达式,例如:
JToken x = obj_linq
.Where( d => d.Key == "my_key")
.Select(v => v)
.FirstOrDefault()
.Value;
string y = ((JValue)x).Value;
Run Code Online (Sandbox Code Playgroud)
要不就:
var y = obj_linq
.Where(d => d.Key == "my_key")
.Select(v => ((JValue)v.Value).Value)
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
或者用这个迭代所有数据:
obj_linq.ToList().ForEach( x => { do stuff } );
Run Code Online (Sandbox Code Playgroud)