RestSharp问题,无法使用AddJsonBody添加隐式类类型实例

时间:2019-05-07 15:09:29

标签: c# asp.net-core restsharp

我尝试设计一种使用RestSharp以泛型形式发布请求并返回响应的方法。当主体实例是常规的对象类型时,request.AddJsonBody(body)不能在返回“不良请求”状态的情况下使用。

这是我的方法:

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 \\”})或将反序列化类型更改为数组或实现的类型可以从JSON数组反序列化的List等集合接口(例如ICollection,IList),还可以将JsonArrayAttribute添加到该类型中,以强制从JSON数组反序列化

但是,如果我用这个替换AddJsonBody:

request.AddParameter("application/json; charset=utf-8", 
                            JsonConvert.SerializeObject(body), ParameterType.RequestBody);

它将起作用。或者,如果我使用显式主体实例,它将起作用。

我不明白为什么AddJsonBody需要知道显式类型,并且从抛出的异常中知道为什么涉及到Json Array。任何人都可以熟练地解决这个问题吗?谢谢。

0 个答案:

没有答案