使用 RestSharp 反序列化 JSON



我正在使用这样的RetSharphttp://api.weatherapi.com/v1/current.json发出请求:

var request = new RestSharp.Serializers.Newtonsoft.Json.RestRequest();
request.AddHeader("content-type", "application/json");
var client = new RestClient(URL + urlParameters);
client.Proxy = WebRequest.DefaultWebProxy; // I was led to believe this will fix my problem of my requests taking minutes on end to execute, but it didn't that much.
var queryResult = client.Execute(request).Content;
var response = JsonConvert.DeserializeObject<CurrentJsonResponse>(queryResult);

这工作正常,但我不喜欢我必须单独调用JsonConvert,而且,据说 RestSharp 应该内置对这种东西的支持。

我尝试了以下方法:

var response = client.Execute<CurrentJsonResponse>(request).Data; // returns a CurrentJsonResponse object with null properties.
request.JsonSerializer = new NewtonsoftJsonSerializer(); // I put it at the very start, but doesn't help.
var jsonDeserializer = new JsonDeserializer();
client.AddHandler("application/json", jsonDeserializer); // Second verse, same as the first.
var response = client.Execute<object>(request).Data; // Correctly creates an annonymous object that has the right properties/information but it's not exactly what I'm going for. As I wanted it strongly-typed.

什么都没用。如何显式反序列化我使用 RestSharp 获得的 json 响应,而无需单独调用 Newtonsoft。我已经下载了RestSharp.Serializers.Newtonsoft.Json的Nuget。

在第二次尝试中尝试更改

var jsonDeserializer = new JsonDeserializer();
client.AddHandler("application/json", jsonDeserializer);

client.AddHandler("application/json", () => new RestSharp.Serializers.Newtonsoft.Json.NewtonsoftJsonSerializer());

并致电:

var response = client.Execute<CurrentJsonResponse>(request).Data;

默认的反序列化应该可以正常工作,我只需要在 post 请求期间更改一些序列化设置。

var request = new RestRequest();    
var restClient = new RestClient(endPoint);
request.Method = Method.GET;
request.AddHeader("Content-Type", "application/json");
var response = restClient.Execute<T>(request);
if (response.ErrorException != null)
{
//log the exception
//throw exception;
}
return response.Data;

根据我的经验,我已经看到如果映射类不正确,默认反序列化不会产生预期的结果。请确保已将 JSON 响应正确转换为其相应的 c# 类。

最新更新