Restsharp在使用上的一點小問題


Restsharp確實是個優秀的插件,它最大的特點是內置了JsonConverter, 在一定程度上簡化了HttpWebRequest的使用,在nuget上面有19.3M的下載量,是個很好的證明。

但我認為它的致命缺陷就在於內置了JsonConverter, 在使用時無法將實體類與Http訪問做解耦,因此很難封裝成一個helper類。當然可以用泛型來解決這個問題,如果不考慮解耦的話。

第二個問題是,它內置的JsonConvert要求實體類有無參數的構造函數,而NewtonJson不用。

   實際上,我在實體類上加入了無參數的構造函數,但還是反序列化失敗了:

    response2.Data返回null, response2.Content返回實體的Json

第三個問題,支持的.net Framework版本比較少

    我在4.0,4.5上nuget失敗,在4.5.2nuget成功。

留下代碼做個記錄

   public Person CheckPerson(WorkInfo workInfo, int page, int pageSize)
        {
            string baseUrl = "https://api.abc.com/api";
            string url = "/Person";
            url += page == 100 ? page.ToString() : pageSize + "/" + page;
            //發送HTTPS請求  
            if (baseUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                HwApiHelper.SetCertificatePolicy();
            }
            var client = new RestClient(baseUrl);

            var request = new RestRequest(url);
            request.Timeout = 30000;

            request.Method = Method.POST;
            request.AddHeader("Content-Type", "application/json");
            request.AddHeader("Authorization", "Bearer " + token.Access_token);
            request.AddHeader("soapAction", "");
            request.AddJsonBody(workInfo);//直接傳輸一個實體,無需如HttpWebRequest那樣,先序列化,編碼成byte[],再通過WriteSteam寫
            /*                                
            //方式1:按指定的格式返回響應文本
            IRestResponse response = client.Execute(request);
            var content = response.Content;//按指定的格式返回響應文本,如json
            */
            //方式2:用內置反序列化工具直接反序列化為實體,要求實體類有無參數的構造函數
            IRestResponse<Person> response2 = client.Execute<Person>(request);
            //已經增加了無參構造函數,卻可能不成功

            return response2.Data;
        }

       public class Person
        {
            public string Name { get; set; }
            public DateTime BornDate { get; set; }
            public string Gender { get; set; }
            public Person()
            {

            }
        }
       public  class WorkInfo
        {
            public string Company { get; set; }
            public string Title { get; set; }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM