Mój JSON wygląda następująco:
{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}
Znalazłem bibliotekę deserializacji Newtonsoft JSON.NET dla języka C #. Próbowałem go użyć w następujący sposób:
object JsonDe = JsonConvert.DeserializeObject(Json);
Jak mogę uzyskać dostęp do JsonDe
obiektu, aby uzyskać wszystkie dane typu? Próbowałem z pętlą, ale nie działa, ponieważ obiekt nie ma modułu wyliczającego.
c#
json.net
deserialization
abc cba
źródło
źródło
Odpowiedzi:
Możesz zaimplementować klasę, która przechowuje pola, które masz w swoim JSON
class MyData { public string t; public bool a; public object[] data; public string[][] type; }
a następnie użyj ogólnej wersji DeserializeObject:
MyData tmp = JsonConvert.DeserializeObject<MyData>(json); foreach (string typeStr in tmp.type[0]) { // Do something with typeStr }
Dokumentacja: serializacja i deserializacja JSON
źródło
MyData tmp = (MyData)JsonConvert.DeserializeObject(json);
. Ogólna wersja deserializacji działa znacznie lepiej, dzięki. :-)dotnet add package Newtonsoft.Json
iusing Newtonsoft.Json;
.O wiele łatwiejsze rozwiązanie: użycie typu dynamicznego
Począwszy od Json.NET 4.0 Release 1, istnieje natywna obsługa dynamiczna . Nie musisz deklarować klasy, po prostu użyj
dynamic
:dynamic jsonDe = JsonConvert.DeserializeObject(json);
Wszystkie pola będą dostępne:
foreach (string typeStr in jsonDe.Type[0]) { // Do something with typeStr } string t = jsonDe.t; bool a = jsonDe.a; object[] data = jsonDe.data; string[][] type = jsonDe.Type;
Dzięki dynamice nie musisz tworzyć specjalnej klasy do przechowywania danych.
źródło
dynamic
:)Zgodnie z dokumentacją Newtonsoft możesz również deserializować do anonimowego obiektu, takiego jak ten:
var definition = new { Name = "" }; string json1 = @"{'Name':'James'}"; var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition); Console.WriteLine(customer1.Name); // James
źródło
definition
, jak mam użyćDeserializeAnonymousType
w tym przypadku?