2015-06-13 13 views
6

Próbuję przetworzyć tę odpowiedź kalendarza Google, którą otrzymuję z interfejsu API odpoczynku przy użyciu C#, ale wydaje się, że utknąłem. [edytuj] Aktualizacja, symbol @ nie przeszkadza w przewierceniu, sprawdziłem, zastępując @ przez _at_. Zobacz zrzut ekranu Quick Watch: enter image description hereParsowanie Jsona w dynamiczny obiekt C# za pomocą klucza dynamicznego

jestem pewien, mam dostępu do tego nieprawidłowo ...

Oto jsonString Próbuję analizować:

{ 
"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 Wcześniej próbowałem przy użyciu:

dynamic myObj = Json.Decode(jsonString); 

i

var myObj = JsonConvert.DeserializeObject(jsonString); 

ale nie mogę się dowiedzieć, jak dostać się do klucza [email protected] (który jest dynamiczny w oparciu o to, co wysyłam), aby przechodzić przez wszystkie czasy zajęte.

Pomysły?

enter image description here

Odpowiedz

3

można uzyskać do niego dostęp za pośrednictwem indekser strun:

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

Zrobiłem to, udało mi się uzyskać dostęp do właściwości za pomocą tej metody dostępu: myObj ["kalendarze"] ["[email protected]"] ["busy"] [0] .start Dzięki! – user3491101

+0

Pytanie, czy istnieje sposób dynamicznego uzyskania adresu e-mail? Wiem o tym, ale w przyszłości, gdybym tego nie wiedział - w jaki sposób miałbym do niego dostęp? Czy istnieje jakaś własność dziecka lub coś podobnego? – user3491101

+1

foreach (var item w myObj ["kalendarze"]) Console.WriteLine (item.Name) –

0

I mieć do czynienia z podobnym problemem w przeszłości, jednak mój był kwestią myślnikiem, po prostu zastąpić łącznik z podkreśleniem. możesz potencjalnie zrobić coś podobnego, ale widząc, że jest to adres e-mail, może lepiej zmodyfikować schemat (wyrażenie regularne widząc, że otrzymujesz json z interfejsu API innej firmy) utwórz nowy klucz "mail", aby może zapewnić nienaruszenie oryginalnego adresu e-mail.

Ale co ważniejsze, jak kwerendy ten interfejs API może już wiedział, e-mail, jeśli tak można po prostu zrobić regex zastąpić:

 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

Dzięki Joachim, próbowałem zastąpić symbol @, ale to nie pomogło rozwiązać mojego problemu - zobacz zrzut ekranu z góry. Wygląda na to, że jest zagnieżdżonym Jsonem w Jsonie? – user3491101

Powiązane problemy