내 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의 A를 캐스팅하여 객체 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 } );