2013-04-22 8 views
12

ho una risposta JSON che sto cercando di deserializzare con RestSharp, e sembra che questo:RestSharp deserializzazione con JSON Array

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

base al largo di alcuni suggerimenti che ho trovato, ho provato installare il mio POCO in questo modo:

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; } 
} 

E poi la mia esecuzione assomiglia a questo:

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

Ho wever, response.Data è NULL, e ho provato altre varianti senza fortuna.

Quindi, quale struttura di classe e mappatura dovrebbe essere utilizzata per questa situazione? Ho anche provato questo senza la classe DeviceContainer in più.

Grazie per l'aiuto.

+0

può essere che si dovrebbe aggiungere totale, avviare e contare oggetti da deviceslist classe. – Vladimir

risposta

16

RestSharp solo opera sulle proprietà, non deserializzare ai campi, quindi assicuratevi di convertire i Devices e Device campi per le proprietà.

Inoltre, controllare due volte il Content-Type della risposta, se le risposte sono qualcosa di non predefinito, RestSharp potrebbe non utilizzare affatto JsonDeserializer. Vedere la mia risposta su RestSharp client returns all properties as null when deserializing JSON response

+0

Era così. Stupido errore dimenticando il '{get; impostato; } '. Una volta che l'ho aggiunto, ha funzionato perfettamente. Grazie! –

2

RestShartp non supporta DataAnnotation/DataMember, rinominare le proprietà senza maj:

  • Dispositivi -> Dispositivi
  • dispositivo -> dispositivo

e non dimenticare il {get; set;} ;).

21

Ho avuto un problema un po 'diverso quando il mio deserializzazione POCO conteneva una serie ..

Cambiare si Devices[]-List<Devices> risolto il problema e deserializzato correttamente.

+0

grazie, sei stato colpito da questo e la tua soluzione l'ha risolto. – mahonya

+3

'IEnumerable <>' e 'IList <>' non funzionano neanche. Hai bisogno di 'Lista <>' –

3

Qualcosa in cui mi sono imbattuto è che non funziona se si utilizzano interfacce come: IEnumerable o IList, deve essere un tipo concreto.

Questo non funzionerà, come per altri serializzatori json come json.net.

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

public class DeviceContainer 
{ 
    ... 
} 

avrebbe dovuto essere qualcosa di simile:

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

public class DeviceContainer 
{ 
    ... 
} 
+0

Questo aiuta se stai usando una versione più recente di RESTSharp (ad esempio non usando JSON.NET) per JsonDeserializer – Skyguard