【发布时间】:2016-10-15 10:28:28
【问题描述】:
我正在创建一个 Web API 端点,它将作为一项服务来检索我们的应用程序配置、进行日志记录等。我遇到的问题是能够在控制台应用程序中反序列化 Json。
设置
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
网络 API
[HttpGet]
[Route("Person")]
public IHttpActionResult GetPerson()
{
Person person = new Person
{
FirstName = "Steve",
LastName = "Rogers",
DateOfBirth = new DateTime(1920, 7, 4)
};
return Ok(JsonConvert.SerializeObject(person));
}
控制台应用程序
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost");
var response = client.GetAsync("api/Person").Result;
var data = response.Content.ReadAsStringAsync().Result;
var person = DeserializeJson<Person>(data);
}
public static T DeserializeJson<T>(string input)
{
var result = JsonConvert.DeserializeObject(input);
var result2 = JsonConvert.DeserializeObject(result.ToString());
return JsonConvert.DeserializeObject<T>(result2.ToString());
}
价值观
数据 = "\"{\\"FirstName\\":\\"Steve\\",\\"LastName\\":\\"Rogers\\",\\"DateOfBirth\\":\ \"1920-07-04T00:00:00\\"}\""
结果 = "{\"FirstName\":\"Steve\",\"LastName\":\"Rogers\",\"DateOfBirth\":\"1920-07-04T00:00:00\" }"
结果2 = {{ “名字”:“史蒂夫”, “姓氏”:“罗杰斯”, “出生日期”:“1920-07-04T00:00:00” }}
我遇到的问题是,在第三次反序列化之前,我无法反序列化为 Person 对象。 result2 中的值是我唯一能够成功反序列化为 Person 的值。有没有更有效的方法来完成这种反序列化?最好不要进行 3 次迭代。
【问题讨论】:
-
我认为 JsonConvert.SerializeObject(person) 在 Web API 答案中可能没用,并且可以更改响应格式,您是否尝试仅返回类似:return Ok(person);来自你的 web api 端点?
-
我尝试了
string的返回类型以及使用.SerializeObject()的不同Formatting重载仍然没有运气。 -
并且不使用 .SerializeObject() ?
-
WebApi默认将其序列化。
-
当然,这就是为什么不需要执行 JsonConvert.SerializeObject(person) :)
标签: c# json serialization asp.net-web-api deserialization