【发布时间】:2016-03-29 13:39:55
【问题描述】:
this 之类的答案似乎要经过几个步骤,才能为 HTTP Web 请求返回的 JSON 内容获取 string,然后将其传递到 JSON.net 进行反序列化。
是否有任何可以使用的快捷方式,例如是否有任何 API 方法接受 WebResponse 或其他中间对象?我看不到任何东西,但如果它们存在,它会使代码更整洁。
【问题讨论】:
标签: c# .net json json.net httpwebrequest
this 之类的答案似乎要经过几个步骤,才能为 HTTP Web 请求返回的 JSON 内容获取 string,然后将其传递到 JSON.net 进行反序列化。
是否有任何可以使用的快捷方式,例如是否有任何 API 方法接受 WebResponse 或其他中间对象?我看不到任何东西,但如果它们存在,它会使代码更整洁。
【问题讨论】:
标签: c# .net json json.net httpwebrequest
不,它没有。 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);
}
【讨论】: