2017-12-31 42 views
-3

Ich habe die folgende JSON-Zeichenfolge. Was ist der beste Weg, die ID aus C# zu extrahieren?Extract ID von JSON String

{ 
    "count":1, 
    "value": [ { 
     "id":35, 
     "projectId": "frfsdf-039a-405b-8835-5ddb00cfsdf9f107", 
     "name":"Default", 
     "pool":{ 
      "id":1, 
      "scope":"8850710d-4558-4f08-8064-38000a03d209", 
      "name":"Default", 
      "isHosted":false, 
      "poolType":"automation" 
     } 
    }] 
} 
+3

http://idownvotedbecau.se/noattempt/ – Amy

+1

Siehe [Einfachste Möglichkeit, JSON-Antwort zu parsen] (https://stackoverflow.com/q/34043384/3744182). – dbc

+1

Ich würde [dieses thread] (https://StackOverflow.com/questions/16459155/how-to-access-json-object-in-c-sharp) auschecken. Sollte deine Frage beantworten! –

Antwort

2

mit Newtonsoft.Json:

JObejct.Parse(str)["value"].First()["id"].Value<string>()

Newtonsoft ist so ziemlich der Weg, JSON in C# zu behandeln.

Beachten Sie, dass Sie mehr als ein Element im Array haben können. Dieser Code übernimmt den ersten.

+1

Ich würde vielleicht zuerst FirstOrDefault() aufrufen und dann testen, ob es nicht null ist. First() kann dazu führen, dass die Anwendung fehlschlägt, wenn die Sammlung leer ist. Ansonsten ist das eine gute Antwort –

2

Die Entwickler-Zeit -cheapest Weise C# dynamic

using Newtonsoft.Json; 

Int32 GetId() 
{ 
    String jsonStr = "{ \"count\":..."; 

    dynamic jsonBlob = JObject.Parse(jsonStr); 
    return jsonBlob.value[0].id; 
} 

Hinweis I dynamic zu verwenden im Gegensatz ist persönlich zu verwenden wäre, weil Sie Typsicherheit Kompilierung Zeit zu verlieren, und dynamic ist etwas teuer für Single-Use-Operationen - so könnten Sie es unter Verwendung von Json.NET eigenen Token-Objekten verarbeiten wollen:

JObject root = JObject.Parse(jsonStr); 
JToken idToken = root.Properties["value"].GetChildren().First().Properties["id"]; 
return idToken.ToObject<Int32>(); 

Schließlich können Sie immer Ihre eigene Klasse definieren und Deserialisieren auf diese Weise:

class Foo { 
    public Int32 Count { get; set; } 
    public FooValue[] Value { get; set; } 
} 
class FooValue { 
    public Int32 Id { get; set; } 
    public Guid ProjectId { get; set; } 
    public String Name { get; set; } 
} 

Foo foo = JsonConvert.Deserialize<Foo>(jsonStr); 
return foo.Value[0].Id; 

Wenn das JSON-Format immer konsistent sein wird, und Sie werden keine andere JSON werden die Verarbeitung dann können Sie die Abhängigkeit von Newtonsoft vermeiden. Json (Json.NET) durch einen regulären Ausdruck oder sogar triviale Kettenverarbeitung unter Verwendung von:

Int32 idIdx = jsonStr.IndexOf("\"id\":"); 
if(idIdx == -1) return null; 
Int32 commaIdx = jsonStr.IndexOf(",", idIdx); 
if(commaIdx == -1) return null; 
return jsonStr.Substring(idIdx, commaIdx - idIdx);