首页 > 解决方案 > 使用 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.Jsonnuget。

标签: c#jsonrest

解决方案


在你的第二次尝试中尝试改变

 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;

推荐阅读