回答:
あなたが見ればのドキュメントJObject
、あなたはそれが実装されていることがわかりますIEnumerable<KeyValuePair<string, JToken>>
。したがって、単に次のように使用して反復できますforeach
。
foreach (var x in obj)
{
string name = x.Key;
JToken value = x.Value;
…
}
obj
はタイプJObject
でした。しかしJObject
と同様の問題を持っているようですdynamic
。コンパイラは、型引数をに推測できません.Select
。私はそれらを明示的に与えることができobj.Select<KeyValuePair<string, JToken>, (result type)>(...)
、私にも役立ちます
JObject
両方IEnumerable<KeyValuePair<string, JToken>>
をIEnumerable<JToken>
(を介して間接的にJContainer
)実装しているためです。
JToken value
て次のペアのセットを反復処理する方法を教えてください。
JObjectsは、それをJTokenにキャストすることにより、JPropertyオブジェクトを介して列挙できます。
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(...)
。または、少なくともそれがコードの一部であることがわかりました。