2012-06-05 12 views
14

İstemci tarafı, resmi bir JSON içeriği "{\"Id\":[1,2,3],\"Size\":56}" alır, ancak bayt dizisinin serileştirilmesinde bir hatayla karşılaşır.RestSharp serileştirme JSON içeriği (bir nesneyi bir bayt dizisi içerir) hatası

1 Hata

IRestResponse<key> response = client.Execute<key>(request); 

2 Hata iletinin altındaki açıklamada oluşur "Bu nesne için tanımlanan yok parametresiz oluşturucu" dir.

public class key 
{ 
    public byte[] id { get; set; } 
    public int Size { set; get; } 
} 

4 JSON biçiminde dizesi ve tamsayı içerir ve tüm ince ama bayt dizisi var nesneyi geçen denedim: o sunucu tarafında olduğu gibi

3 istemci boyutunda nesne sınıfı aynıdır.

cevap

23

Bu soruna da girdim.

var response = client.Execute(request); 
var keyResponse = JsonConvert.DeserializeObject<key>(response.Content); 

keyResponse şimdi JSON içerikten serileştirilemezse anahtar sınıfının bir örneği olmalıdır: Benim çözümüm sonucunu serisini yürütmek ham gerçekleştirmek için RestSharp kullanabilir ve Json.NET kullanmaktı.

36

RestSharp'ın JsonDeserializer dizisini seri hale getiremez. byte[] yerine List<byte> kullanın. Daha fazla bilgi için bkz. https://github.com/restsharp/RestSharp/wiki/Deserialization

+0

Bu bana da oldu, sonunda derslerimin birinde etrafta duran sinir bozucu bir dizi bıraktığımı anladım. Bir Listenin 'a değiştirilmesi sorunu derhal giderdi ve tüm testler geçmeye başladı. – jamesbar2

0

Chris Hogan'ın yanıtına ek olarak, RestSharp'ın atamış olduğum özel JSON.NET diziselleştiricisi yerine varsayılan seri hale getirici kullanıldığında bu hatayı aldığımı belirtmek isterim. Bunun nedeni, application/json içerik türünde bir işleyici ekledim, buna karşılık yanıtı aldığım API içeriği text/json olarak döndürüldü.

AddHandler("text/json", jsonDeserializer) numaralı telefonu arayarak AddHandler numaralı telefonu değiştirerek sorunu çözdüm.