簡體   English   中英

使用 RestSharp 反序列化 JSON

[英]Deserialize JSON with RestSharp

我正在使用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;

默認反序列化應該可以正常工作,我只需要在發布請求期間更改一些序列化設置。

   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;

根據我的經驗,如果映射 class 不正確,我已經看到默認反序列化不會產生預期的結果。 確保您已將 JSON 響應正確轉換為相應的 c# class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM