私は自分の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 addicts、そして svick's answer に基づいて、ここに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 } );