【发布时间】:2017-06-14 07:35:56
【问题描述】:
我有一个 Model 类,它在其中一个 WebAPI 中有一个 GENERIC 属性,在通过 HttpGet 调用 WebAPI Controller 方法时,它返回对象,但我无法对响应 JSON 进行反序列化。如果我尝试将 JSON 字符串复制到局部变量(响应的硬编码值)中,它的 DE 序列化效果很好,但在动态中它会失败。请看模型类
通用模型类:
public class Response<T> {
public T Person { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
}
员工模型类:
public class Employee {
public string EmpId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string OrganizationName { get; set; }
}
public class Celebrity {
public string FirstName { get; set; }
public string LastName { get; set; }
public string Language { get; set; }
}
我有一个 Response<Celebrity> 类型的 JSON 字符串
考虑 WebAPI 控制器方法
public class PersonController : ApiController {
[HttpGet]
public Response<Celebrity> GetPerson() {
return new Response<Celebrity>()
{
Person = new Celebrity()
{
FirstName = "Emma",
LastName = "Watson",
Language = "English"
},
Mobile = "222123456",
Email = "emma@gmail.com"
};
}
}
在控制台应用程序中,我正在调用 WebAPI 控制器方法并且它不是反序列化的。
string jsonContent = string.Empty;
var apiResponse = ApiClient.GetAsync("GetPerson").Result;
if (apiResponse.IsSuccessStatusCode) {
jsonContent = apiResponse.Content.ReadAsStringAsync().Result;
Response<Celebrity> person = JsonConvert.DeserializeObject<Response<Celebrity>>(jsonContent);
}
我尝试了以下方法
步骤:#1我复制了apiResponse.Content.ReadAsStringAsync().Result的值
{"Result":{"FirstName":"Emma","LastName":"Watson","Language":"English"},"Mobile":"222123456","Email":"emma@gmail.com"}
步骤:#2我使用了步骤#1的硬编码值
string jsonContent = "{\"Result\":{\"FirstName\":\"Emma\",\"LastName\":\"Watson\",\"Language\":\"English\"},\"Mobile\":\"222123456\",\"Email\":\"emma@gmail.com\"}";
Response<Celebrity> person = JsonConvert.DeserializeObject<Response<Celebrity>>(jsonContent);
它的工作。我不知道我错过了什么。
【问题讨论】:
标签: c# json asp.net-web-api asp.net-web-api2 json-deserialization