【问题标题】:Does JSON.net provide classes which accept HTTP response objects directly?JSON.net 是否提供直接接受 HTTP 响应对象的类?
【发布时间】:2016-03-29 13:39:55
【问题描述】:

this 之类的答案似乎要经过几个步骤,才能为 HTTP Web 请求返回的 JSON 内容获取 string,然后将其传递到 JSON.net 进行反序列化。

是否有任何可以使用的快捷方式,例如是否有任何 API 方法接受 WebResponse 或其他中间对象?我看不到任何东西,但如果它们存在,它会使代码更整洁。

【问题讨论】:

    标签: c# .net json json.net httpwebrequest


    【解决方案1】:

    不,它没有。 JSON.net 不直接与 HTTP 混合。您必须进行手动反序列化。

    但是,为了简洁起见,我可以建议使用 RestSharp 吗?它使我自己的代码看起来更整洁。您可以实现 ISerializer 并在其中让您的序列化方法在内部使用所有 Newtonsoft。 RestClient 处理与 WebResponse 相关的所有繁重工作,并将自动为您反序列化。不,这不是我的图书馆。

    public class Employee
    {
       [JsonProperty(PropertyName = "employee_name")]
       public string Name { get; set; }
    }
    
    private IRestResponse<Employee> GetEmployee()
    {
       var request = new RestRequest();
       request.Resource = "/api/employees"
       request.Method = Method.GET;
       var response = Execute<Employee>(request);
    }
    
    public IRestResponse<T> Execute<T>(RestRequest request) where T : new()
    {
       // Pass in reusable ISerializer (can internally use Newtonsoft)
       request.JsonSerializer = new JsonNetSerializer(); 
       return client.Execute<T>(request); // Client is of type RestClient
    }
    

    或者,您可以这样做而根本不实现序列化程序,因为它提供了一个 Content 属性,您可以将其作为字符串传递到 JSON.net:

    public IRestResponse<T> Execute<T>(RestRequest request) where T : new()
    {
       var response = client.Execute(request); // Client is of type RestClient
       return JsonConvert.DeserializeObject<T>(response.Content);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2013-02-07
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多