c# - 使用 RestSharp 反序列化 JSON
问题描述
我正在请求这样http://api.weatherapi.com/v1/current.json
使用RetSharp
:
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 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;
推荐阅读
- angular - 如何在 Angular 反应形式的 mat-checkbox 或 mat-radio-button 之间切换?
- python - 来自 Python 的 mongodb 聚合查询
- python - 如何降低时间复杂度?
- android - 如何在android中使用背景图像制作透明布局?
- sql-server - 表连接总和不正确
- html - 如何更改特定字符的颜色 [jQuery/RegEx]
- mongodb - 如何提高此 MongoDB 查询的性能
- android - EdgeLight:屏幕边框不会超出反应原生的缺口和软键
- jquery - 使用 AJAX 从 HTML 表中插入大量行的最佳方法
- python - 显示具有自定义颜色的数组