Я пытаюсь разработать метод для отправки запроса и возврата ответа в обобщенных формах с помощью RestSharp. Когда экземпляром тела является общий тип объекта , request.AddJsonBody (body) не может работать с возвращенным статусом Bad Request.
Это мой метод:
public async Task<T> ExecutePostAsync<T, TK>(string url, IDictionary
headers, TK body)
where T : new()
{
var request = new RestRequest(url, Method.POST);
if (headers != null && headers.Count > 0)
{
foreach (object key in headers.Keys)
{
request.AddHeader((string)key, (string)headers[key]);
}
}
request.AddJsonBody(body);
var cancellationTokenSource = new CancellationTokenSource();
IRestResponse response = await _restClient.ExecuteTaskAsync(request, cancellationTokenSource.Token);
if (!response.IsSuccessful)
{
const string message = "Error retrieving response. Check inner details for more info.";
var browserStackException = new ApplicationException(message, response.ErrorException);
throw browserStackException;
}
var result = JsonConvert.DeserializeObject<T>(response.Content);
return result;
}
Я вызвал его, используя этот код:
result = await _restSharpJsonOperation.ExecutePostAsync<object, object>(url, headers, request);
Затем выдается исключение:
Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип «IdentifierQuoteRequest», поскольку для типа требуется объект JSON (например, {\\ "name \\": \\ "value \\"} ) для правильной десериализации. Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {\\ "name \\": \\ "value \\"}), либо измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), такой как List, который можно десериализовать из массива JSON. JsonArrayAttribute также можно добавить к типу, чтобы заставить его десериализоваться из массива JSON
Но, если я заменю AddJsonBody на это:
request.AddParameter("application/json; charset=utf-8",
JsonConvert.SerializeObject(body), ParameterType.RequestBody);
Это будет работать. Или, если я использую экземпляр тела явного типа, он будет работать.
Я не понимаю, почему AddJsonBody должен знать явный тип, и из брошенного исключения, почему задействован массив Json. Может кто-нибудь опытный помочь с этой проблемой? Спасибо.