RestSharp десериализует содержимое JSON (представляет объект, содержащий байтовый массив)

Клиентская сторона получает формальный контент 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, и что все мелкие, но байтовые массивы.

Ответы

Ответ 1

JsonDeserializer от RestSharp не может десериализовать массив. Вместо byte[] используйте List<byte>. Для получения дополнительной информации см. https://github.com/restsharp/RestSharp/wiki/Deserialization

Ответ 2

Я тоже столкнулся с этой проблемой. Моим решением было использовать RestSharp для выполнения необработанного выполнения и использовать Json.NET для десериализации результата:

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

keyResponse теперь должен быть экземпляром вашего класса ключей, десериализованным из содержимого JSON.

Ответ 3

В дополнение к ответу Криса Хогана, я хотел бы указать, что я получил эту ошибку, когда RestSharp неправильно использовал сериализатор по умолчанию вместо настраиваемого сериализатора JSON.NET, который я назначил.

Причиной этого было то, что я добавил обработчик с типом контента application/json, тогда как API, с которого я получал ответ, возвращал содержимое как text/json.

Итак, изменив вызов AddHandler на AddHandler("text/json", jsonDeserializer), я решил проблему.