【发布时间】:2020-06-20 14:03:45
【问题描述】:
我正在使用RetSharp 向http://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.
没有任何效果。如何在不单独调用 Newtonsoft 的情况下明确反序列化使用 RestSharp 获得的 json 响应。我已经下载了RestSharp.Serializers.Newtonsoft.Json nuget。
【问题讨论】:
-
你试过
var response = client.Execute<CurrentJsonResponse>(request).Data或var response = client.Execute<CurrentJsonResponse>(request)吗? -
@GuruStron,
var response = client.Execute<CurrentJsonResponse>(request).Data是我尝试过的第一件事。我想我也尝试过另一个,但现在会测试并更新。 -
Doc 非常坚持
Execute<T>(request).Data应该可以工作 =) -
@GuruStron,正如我所想的那样 - 我已经尝试过
var response = client.Execute<CurrentJsonResponse>(request),但是它只返回请求对象、状态码和所有内容。 -
@GuruStron,我在给定的文档中没有看到任何关于 newtonsoft 反序列化的提及,但谢天谢地,你的答案是......好吧,答案。