Próbuję ustalić, jak uzyskać dostęp do danych znajdujących się w moim JObject i do końca życia nie mogę określić, jak z nich korzystać.
JObject Object = (JObject)Response.Data["my_key"];
Mogę go wydrukować na konsoli robiąc Console.WriteLine (Object) i widzę dane, wygląda to tak:
{
"my_data" : "more of my string data"
...
}
Ale nie mam pojęcia, jak po prostu iterować / wyliczać przez to, ktoś ma jakieś pomysły? Jestem teraz bardzo zagubiony.
((IEnumerable<KeyValuePair<string, JToken>>)obj).Select(...)
zamiast zwykłego staregoobj.Select(...)
; a przynajmniej to właśnie znalazłem jako część mojego kodu.obj
miał typJObject
; aleJObject
wydaje się mieć podobne problemy dodynamic
. Kompilator nie może wywnioskować argumentów typu.Select
. Mogę je podać wprost,obj.Select<KeyValuePair<string, JToken>, (result type)>(...)
działa też dla mnieJObject
wdraża obaIEnumerable<KeyValuePair<string, JToken>>
iIEnumerable<JToken>
(pośrednio przezJContainer
).JToken value
do iteracji w kolejnym zestawie par?JObjects można wyliczyć za pomocą obiektów JProperty , rzutując je na JToken :
Jeśli masz zagnieżdżony JObject w innym JObject, nie musisz rzutować, ponieważ akcesor zwróci JToken:
źródło
obj.Properties().Select(p => p.Name + ": " + p.Value)
.Odpowiedź nie zadziałała dla mnie. Nie wiem, skąd wzięło się tyle głosów. Chociaż pomogło mi to wskazać kierunek.
Oto odpowiedź, która zadziałała dla mnie:
źródło
Dla ludzi takich jak ja, uzależnionych od linq i w oparciu o odpowiedź Svicka , tutaj podejście linq:
Teraz możesz tworzyć wyrażenia linq takie jak:
Lub tylko:
Lub ten do iteracji po wszystkich danych:
źródło