【问题标题】:Web API returns escaped JSONWeb API 返回转义的 JSON
【发布时间】:2018-04-28 19:27:44
【问题描述】:

我在 .NET core 2.0 Web API 项目中有一个 POST 方法,需要返回 JSON(使用 newtonsoft)。我在方法的末尾有以下代码:

ObjectResult objRes = new ObjectResult(JsonConvert.SerializeObject(result, settings));
objRes.ContentTypes.Add(new MediaTypeHeaderValue("application/json"));
return objRes

当我使用 Postman 进行测试时,我得到如下结果:

"{\"name\":\"test\",\"value\":\"test\"}"

如您所见,JSON 仍然在 postman 中转义。当我在 .NET core 1.0 项目中测试完全相同的代码时,我在 Postman 中得到以下信息:

{
  "name": "test",
  "value": "test"
}

如何在我的 .NET core 2.0 项目中获得相同的结果? 我在想这可能是由于 Newtonsoft 造成的,但是当我将反序列化调试为字符串时,调试器在 .NET core 1.0 和 2.0 项目中显示完全相同(转义)的值。

【问题讨论】:

标签: c# json asp.net-core-webapi


【解决方案1】:

我认为您不必在发送对象之前对其进行序列化。在 .NET Core 中默认会为您序列化。

【讨论】:

【解决方案2】:

你可以只在控制器中返回结果,它会被框架序列化。

[HttpPost]
public object Post()
{
    var result = new MyObject { Name = "test", Value = "test" };
    return result;
}

或者你可以这样做:

return new OkObjectResult(result);

或者如果你从 Controller 继承:

return Ok(result);

【讨论】:

  • 是的,但是 JSON.NET 确实比 .NET 序列化程序具有一些优势,因此请参阅解决方案 stackoverflow.com/a/48335234/1317161 以使其与 JSON.NET 一起使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多