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

ASP.NET Web API返回JSON在浏览器和Postman显示转义字符如何解决

问题根因

你遇到的多余转义字符问题是触发了两次JSON序列化导致的:

  1. 你手动调用JsonConvert.SerializeObject将Test对象序列化为了带格式的JSON字符串
  2. 控制器方法声明的返回值类型为string,ASP.NET Web API 默认的序列化器会把返回的字符串当作普通字符串值再做一次JSON序列化,最终就会出现外层多引号、内部引号和换行符被转义的情况。

解决方案

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

这是最符合ASP.NET Web API设计规范的写法,不需要手动处理序列化逻辑:

  1. 修改控制器代码,将返回值改为IHttpActionResult类型,直接返回对象:
namespace Test.REST.Controllers
{
    public class TestController : ApiController
    {
        public IHttpActionResult Get()
        {
            Test.REST.Models.Test test = new Test.REST.Models.Test(2, "hello");
            return Ok(test);
        }
    }
}
  1. 如果需要全局开启JSON格式化缩进,在WebApiConfig.cs的Register方法中添加配置即可:
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // 其他原有配置...
        config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
    }
}

方案二:手动构造响应,避免二次序列化

如果有特殊需求必须自己生成JSON字符串,可以直接构造HttpResponseMessage返回,指定内容类型为application/json,跳过框架的自动序列化逻辑:

namespace Test.REST.Controllers
{
    public class TestController : ApiController
    {
        public HttpResponseMessage Get()
        {
            Test.REST.Models.Test test = new Test.REST.Models.Test(2, "hello");
            string json = JsonConvert.SerializeObject(test, Formatting.Indented);
            System.Diagnostics.Debug.WriteLine(json);
            
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            response.Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
            return response;
        }
    }
}

两种方案执行后,浏览器和Postman中都可以直接看到格式化后的正常JSON结构,不会再有多余转义字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:15:02