it-swarm.com.de

Wie zähle ich ein JObject auf?

Ich versuche zu ermitteln, wie auf die Daten in meinem JObject zugegriffen werden kann, und ich kann nicht bestimmen, wie ich sie verwenden soll.

JObject Object = (JObject)Response.Data["my_key"];

Ich kann es über Console.WriteLine (Object) auf die Konsole drucken und ich sehe die Daten, es sieht so aus:

{
 "my_data" : "more of my string data"
...
}

Aber ich habe KEINE Idee, wie ich es einfach durchlaufen könnte, hat jemand irgendwelche Ideen? Ich bin gerade so ratlos.

83
Geesu

Wenn Sie die Dokumentation für JObject betrachten, werden Sie feststellen, dass IEnumerable<KeyValuePair<string, JToken>> implementiert wird. Sie können also einfach mit einer foreach iterieren:

foreach (var x in obj)
{
    string name = x.Key;
    JToken value = x.Value;
    …
}
134
svick

JObjects kann über JProperty Objekte aufgezählt werden, indem es in ein JToken umgewandelt wird:

foreach (JProperty x in (JToken)obj) { // if 'obj' is a JObject
    string name = x.Name;
    JToken value = x.Value;
}

Wenn Sie ein verschachteltes JObject in einem anderen JObject haben, müssen Sie nicht umsetzen, da der Accessor ein JToken zurückgibt:

foreach (JProperty x in obj["otherObject"]) { // Where 'obj' and 'obj["otherObject"]' are both JObjects
    string name = x.Name;
    JToken value = x.Value;
}
34
Daniel

Die Antwort hat bei mir nicht funktioniert. Ich weiß nicht, wie es so viele Stimmen bekommen hat. Obwohl es mir geholfen hat, mich in eine Richtung zu weisen.

Dies ist die Antwort, die für mich funktioniert hat:

foreach (var x in jobj)
{
    var key = ((JProperty) (x)).Name;
    var jvalue = ((JProperty)(x)).Value ;
}
9
jaxxbo

Für Leute wie mich, linq Süchtige, und basierend auf svicks Antwort , hier ein linq-Ansatz:

using System.Linq;
//...
//make it linq iterable. 
var obj_linq = Response.Cast<KeyValuePair<string, JToken>>();

Jetzt können Sie Linq-Ausdrücke wie folgt erstellen:

JToken x = obj_linq
          .Where( d => d.Key == "my_key")
          .Select(v => v)
          .FirstOrDefault()
          .Value;
string y = ((JValue)x).Value;

Oder nur:

var y = obj_linq
       .Where(d => d.Key == "my_key")
       .Select(v => ((JValue)v.Value).Value)
       .FirstOrDefault();

Oder dieses zum Durchlaufen aller Daten:

obj_linq.ToList().ForEach( x => { do stuff } ); 
0
dani herrera