RestSharp反序列化JSON内容(表示一个对象包含一个字节数组)错误

时间:2012-06-05 02:24:32

标签: json bytearray deserialization restsharp

客户端收到正式的JSON内容"{\"Id\":[1,2,3],\"Size\":56}",但在反序列化字节数组时出错。

1下面的语句中出现错误

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

2错误消息是“没有为此对象定义无参数构造函数。”

3客户端大小的对象类与服务器端的对象类相同:

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

4我尝试通过JSON格式传递包含字符串和整数的对象,这一切都很好但是字节数组。

3 个答案:

答案 0 :(得分:41)

RestSharp中的JsonDeserializer无法反序列化数组。而不是byte[]使用List<byte>。有关详细信息,请参阅https://github.com/restsharp/RestSharp/wiki/Deserialization

答案 1 :(得分:25)

我也遇到过这个问题。我的解决方案是使用RestSharp执行原始执行并使用Json.NET反序列化结果:

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

keyResponse现在应该是从JSON内容反序列化的密钥类的实例。

答案 2 :(得分:0)

除了Chris Hogan的回复之外,我还想指出,当RestSharp错误地使用默认序列化程序而不是我指定的自定义JSON.NET序列化程序时,我收到此错误。

原因是我添加了内容类型为application/json的处理程序,而我收到响应的API将内容返回为text/json

因此,通过将AddHandler调用更改为AddHandler("text/json", jsonDeserializer),我解决了问题。