Próbuję użyć interfejsu API, który używa następującej struktury przykładu dla ich zwróconego pliku json
[
{
"customer":{
"first_name":"Test",
"last_name":"Account",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3545134,
"created_at":"2013-08-06T15:51:15-04:00",
"updated_at":"2013-08-06T15:51:15-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
},
{
"customer":{
"first_name":"Test",
"last_name":"Account2",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3570462,
"created_at":"2013-08-12T11:54:58-04:00",
"updated_at":"2013-08-12T11:54:58-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
}
]
JSON.net działałby świetnie z czymś w rodzaju poniższej struktury
{
"customer": {
["field1" : "value", etc...],
["field1" : "value", etc...],
}
}
Ale nie potrafię wymyślić, jak sprawić, by był zadowolony z dostarczonej struktury.
Użycie domyślnego JsonConvert.DeserializeObject (content) skutkuje poprawną liczbą Customer, ale wszystkie dane są puste.
Wykonanie czynności CustomerList (poniżej) powoduje wyjątek „Nie można deserializować bieżącej tablicy JSON”
public class CustomerList
{
public List<Customer> customer { get; set; }
}
Myśli?
Odpowiedzi:
Możesz utworzyć nowy model do deserializacji swojego Json
CustomerJson
:I możesz łatwo deserializować swój json:
Mam nadzieję, że to pomoże !
Dokumentacja: serializacja i deserializacja JSON
źródło
DeserializeObject()
działa wolno na telefonach z systemem Android z procesorem ARM. Jakieś lepsze rozwiązanie w tej sprawie?JObject.Parse(json);
Dla tych, którzy nie chcą tworzyć żadnych modeli, użyj następującego kodu:
Uwaga: to nie działa w przypadku Twojego ciąg JSON. To nie ogólne rozwiązanie dla każdej struktury JSON.
źródło
var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
IEnumerable
implementacji (3 w porównaniu z List <Tuple>). Po drugie, twoje rozwiązanie implikuje dwa różne klucze - po 1 dla każdego słownika. Co się stanie, jeśli wielu klientów ma to samo imię? Na klawiszach nie byłoby rozróżnienia. Twoje rozwiązanie nie bierze pod uwagę tego konfliktu.var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
zadziała. Najwyraźniej to nie działaKorzystając z zaakceptowanej odpowiedzi, musisz uzyskać dostęp do każdego rekordu za pomocą
Customers[i].customer
i potrzebujesz dodatkowejCustomerJson
klasy, co jest trochę denerwujące. Jeśli nie chcesz tego robić, możesz skorzystać z:Zwróć uwagę, że używam a
List<>
, a nie Array. Teraz utwórz następującą klasę:źródło
Nieznaczna modyfikacja tego, co stwierdzono powyżej. Mój format Json, który sprawdza poprawność to
Korzystając z odpowiedzi AlexDev, zrobiłem to zapętlając każde dziecko, tworząc z niego czytnik
źródło
Dalsza modyfikacja od JC_VA, weź to, co ma i zamień MyModelConverter na ...
To powinno zadziałać w przypadku json
lub
oba zostaną przeanalizowane tak, jakby były
źródło