2015-06-13 4 views
6

Ich versuche, diese Google-Kalenderantwort zu analysieren Ich bekomme von ihrer Rest-API mit C#, aber ich scheine immerzu hängen zu bleiben. [editiert] Update, das @ -Symbol verhindert den Drill-Down nicht, ich verifizierte das @ durch _at_. Siehe den Screenshot der Schnell Uhr: enter image description hereParsen von Json in ein dynamisches C# -Objekt mit einem dynamischen Schlüssel

Ich bin sicher, dass ich den Zugriff auf falsch diese ...

Hier ist die jsonString Ich versuche zu analysieren:

{ 
"kind": "calendar#freeBusy", 
"timeMin": "2015-06-12T14:00:00.000Z", 
"timeMax": "2015-06-14T14:00:00.000Z", 
"calendars": { 
    "[email protected]": { 
    "busy": [ 
    { 
    "start": "2015-06-13T18:30:00Z", 
    "end": "2015-06-13T19:30:00Z" 
    }, 
    { 
    "start": "2015-06-13T20:30:00Z", 
    "end": "2015-06-13T21:30:00Z" 
    }, 
    { 
    "start": "2015-06-13T23:00:00Z", 
    "end": "2015-06-14T00:00:00Z" 
    } 
    ] 
    } 
} 
} 

I‘ Verwendung habe versucht:

dynamic myObj = Json.Decode(jsonString); 

und

var myObj = JsonConvert.DeserializeObject(jsonString); 

aber ich kann nicht herausfinden, wie man in den [email protected] Schlüssel kommt (der dynamisch ist, basiert auf, was ich sende), um durch alle beschäftigten Zeiten zu durchlaufen.

Ideen?

enter image description here

Antwort

3

Sie es über einen String-Indexer zugreifen:

var myObj = JsonConvert.DeserializeObject<dynamic>(jsonString); 
Console.WriteLine(myObj.calendars["[email protected]"]); 
+0

Das hat es geschafft, ich konnte mit dieser Zugriffsmethode auf die Eigenschaften zugreifen: myObj ["Kalender"] ["[email protected]"] ["beschäftigt"] [0] .start Danke! – user3491101

+0

Frage: Gibt es eine Möglichkeit, die E-Mail-Adresse dynamisch zu erhalten? Ich weiß es, aber in Zukunft, wenn ich es nicht wüsste - wie würde ich darauf zugreifen? Gibt es eine Art Kindereigentum oder etwas Ähnliches? – user3491101

+1

foreach (var Artikel in myObj ["Kalender"]) Console.WriteLine (item.Name) –

0

ich mit einem ähnlichen Problem in der Vergangenheit behandelt haben, aber Mine eine Frage der Bindestrich, war ich einfach Bindestrich mit Unterstrich ersetzt. Sie könnten möglicherweise etwas Ähnliches tun, aber da es eine E-Mail-Adresse ist, könnte es besser sein, das Schema zu modifizieren (regulärer Ausdruck, da Sie json von einer API eines Drittanbieters erhalten), erstellen Sie einen neuen Schlüssel "mail" kann sicherstellen, dass Sie die ursprüngliche E-Mail-Adresse intakt beibehalten.

Aber mehr vielleicht wichtiger ist, wie Sie Fragen Sie diese API vielleicht wussten Sie bereits die E-Mail, wenn so können Sie einfach einen regulären Ausdruck ersetzen:

 string json = '... {"[email protected]":...}...'; 
     Regex regex = new Regex(@"\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"); 
     string jsonfixed = regex.Replace(json, "email"); 
+0

Danke Joachim, ich habe versucht, das @ -Symbol zu ersetzen, aber es hat nicht geholfen, mein Problem zu lösen - siehe Quickwatch-Screenshot oben. Scheint es wie ein verschachtelter Json in Json? – user3491101

Verwandte Themen