You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1 MVC中APIController返回JSON为字符串如何解决

ASP.NET Core 3.1 API返回JSON被序列化为字符串的解决方案

问题根源

你的代码触发了两次JSON序列化,导致最终返回的是转义后的字符串格式:

  • 第一次:你手动调用JsonConvert.SerializeObject()将业务对象转为了JSON字符串
  • 第二次:Ok()方法默认会对传入的参数再次执行序列化操作,字符串类型的参数会被加上外层双引号、内部引号转义,就是你在Postman里看到的返回结果。

另外注意你贴出的代码存在变量名笔误:查询结果赋值给了ordersList,但序列化时使用的变量是casos,如果实际运行无报错属于贴代码时的手误,按实际业务变量调整即可。

修复方案

方案1(最推荐):直接返回业务对象,交由框架自动序列化

删掉手动序列化的代码,直接将查询到的集合传入Ok(),框架会自动完成序列化并设置正确的application/json响应头,客户端可以直接读取JSON对象无需额外解析:

public async Task<IActionResult> Get()
{
    var casos =  await _ordenExternaService.GetOrdenExternaCasos();
    return Ok(casos);
}

方案2:手动序列化后直接返回Content结果

如果你有特殊需求必须手动控制序列化逻辑(比如要使用Newtonsoft.Json的特殊配置,而非框架默认的System.Text.Json),可以直接返回ContentResult并指定正确的内容类型,避免框架二次序列化:

public async Task<IActionResult> Get()
{
    var casos =  await _ordenExternaService.GetOrdenExternaCasos();
    var json = JsonConvert.SerializeObject(casos);
    return Content(json, "application/json");
}

补充配置说明

ASP.NET Core 3.1默认使用System.Text.Json作为序列化器,如果你要全局使用Newtonsoft.Json,需要先安装Nuget包Microsoft.AspNetCore.Mvc.NewtonsoftJson,再在Startup.cs的ConfigureServices方法中添加如下配置:

services.AddControllersWithViews()
    .AddNewtonsoftJson();

内容的提问来源于stack exchange,提问作者Francisco G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:15:02