2016-06-25 5 views
0

Hallo Ich habe einen JSON entserialisierten mit NewstonSoft JSon.NET in einen String var wich wie folgt aussieht:JSON Navigation

data = {"123456789": [{ 
"queue": "RANKED_SOLO_5x5", 
"name": "Karthus's Captains", 
"entries": [{ 
    "leaguePoints": 37, 
    "isFreshBlood": false, 
    "isHotStreak": false, 
    "division": "I", 
    "isInactive": false, 
    "isVeteran": true, 
    "losses": 124, 
    "playerOrTeamName": "Nickname", 
    "playerOrTeamId": "123456789", 
    "wins": 136 
}], 
"tier": "SILVER" 
}]} 

Und ich würde gerne wissen, wie kann ich die leaguePoints zum Beispiel Zugriff auf die im Inneren „-Einträge ist ". Vielen Dank im Voraus

+0

Ich möchte auf einen speziellen Eintrag zugreifen, um iut einer var zuzuweisen, nicht um eine spezielle Klasse zu erstellen. – Ay0m3

Antwort

0

Wenn Sie nicht möchten, dass die JSON in konkrete Klassen deserialisieren (wie in this quite similar question gefragt), Sie JSON.NET der JObject -Klasse wie folgt verwenden können:

string jsonData = GetJsonStringFormSomewhere(); 
var jObject = (JObject)JsonConvert.DeserializeObject(jsonData); 

var idOrWhatever = jObject["123456789"].First(); 
var firstEntry = idOrWhatever["entries"].First(); 
var leaguePoints = firstEntry["leaguePoints"].Value<int>(); 
+0

Ist es möglich, zu einem Dictionary zu deserialisieren? – Ay0m3

0

Es gibt verschiedene Möglichkeiten dies mit Newtonsoft zu tun. Ein Weg, ohne zu einem ganzen Objekt zu serialisieren, könnte so sein;

JToken first = JObject.Parse(data); 
    JArray res = (JArray)first.SelectToken("123456789"); 
    JToken entries = (JToken)JObject.Parse(res[0].ToString()); 
    JArray result = JArray.Parse(entries.SelectToken("entries").ToString()); 

    int leaguePoints = (int)result[0].SelectToken("leaguePoints"); 

ich dies schnell erledigt und spaltete es in Zeile für Zeile nach unten, so dass Sie jeden Schritt sehen, aber es bedeutet, dass es nicht sehr elegant ist, kann man natürlich diese oder Verwendung Linq verketten, um Ihre Daten zu erhalten.

+1

Bitte beachten Sie, dass die zusätzlichen Aufrufe von 'Parse' nicht notwendig sind (es ist eigentlich überflüssig), da das ganze Objekt bereits in Ihrer ersten Zeile geparst ist. Anstatt "JToken entries = (JToken) JObject.Parse (res [0] .ToString());' zu machen, können Sie einfach 'JToken entries = res [0];'. Dies gilt auch für die nächste Zeile Ihres Eintrags. – khlr