2013-04-22 14 views
12

mam odpowiedź JSON, który próbuję deserializacji z RestSharp, a wygląda to tak:RestSharp deserializacji z JSON Array

{"devices":[{"device":{"id":7,"deviceid":"abc123","name":"Name"}}, 
      {"device":{"id":1,"deviceid":"def456","name":"Name"}}], 
"total":2, 
"start":0, 
"count":2} 

oparciu off z niektórych sugestii znalazłem, próbowałem skonfigurować moje POCO tak:

public class DevicesList 
{ 
    public List<DeviceContainer> Devices; 
} 

public class DeviceContainer 
{ 
    public Device Device; 
} 

public class Device 
{ 
    public int Id { get; set; } 
    public string DeviceId { get; set; } 
    public string Name { get; set; } 
} 

A potem moje wykonanie wygląda następująco:

// execute the request 
var response = client.Execute<DevicesList>(request); 

Ho wever, response.Data jest NULL i próbowałem innych odmian bez powodzenia.

Jaką więc strukturę klasową i mapowanie należy zastosować w tej sytuacji? Próbowałem również tego bez dodatkowej klasy DeviceContainer.

Dzięki za pomoc.

+0

Może powinieneś dodać sumie, start i liczyć właściwości deviceslist klasę. – Vladimir

Odpowiedz

16

RestSharp tylko działa na właściwości, nie deserializowania do pól, więc upewnij się, aby przekształcić swoje Devices i Device pól właściwości.

Ponadto, sprawdź dwukrotnie odpowiedź Content-Type, jeśli odpowiedzi nie są domyślne, RestSharp może w ogóle nie używać JsonDeserializer. Zobacz moją odpowiedź na RestSharp client returns all properties as null when deserializing JSON response

+0

To było to. Głupi błąd zapominający o '{get; zestaw; } '. Kiedy dodałem to, zadziałało idealnie. Dzięki! –

2

RestShartp nie obsługuje DataAnnotation/DataMember, zmień swoje właściwości bez Maj:

  • Urządzenia -> Urządzenia
  • Device -> urządzenie

I nie zapomnij {get; set;} ;).

21

miałem nieco inny problem, kiedy mój deserializacji POCO zawierał tablicę ..

zmieniając go z Devices[] do List<Devices> rozwiązany i to rozszeregować poprawnie.

+0

dziękuję, właśnie dostałem to i twoja poprawka go rozwiązała – mahonya

+3

'IEnumerable <>' i 'IList <>' również nie działają. Potrzebujesz 'List <>' –

3

Coś, na co natknąłem się, to nie działa, jeśli używane są interfejsy takie jak: IEnumerable lub IList, musi to być konkretny typ.

To nie zadziała, tak jak w przypadku innych serializatorów json, takich jak json.net.

public class DevicesList 
{ 
    public IEnumerable<DeviceContainer> Devices { get; set; } 
} 

public class DeviceContainer 
{ 
    ... 
} 

musiałby to być coś takiego:

public class DevicesList 
{ 
    public List<DeviceContainer> Devices { get; set; } 
} 

public class DeviceContainer 
{ 
    ... 
} 
+0

To pomaga, jeśli używasz nowszej wersji RESTSharp (np. Nie używając JSON.NET) do swojej JsonDeserializer – Skyguard

Powiązane problemy