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

ASP.NET服务端移除JSON斜杠问题求助

解决Web API返回JSON时多余斜杠的问题

我一眼就看出问题所在了——你现在的做法是先把DataTable序列化成JSON字符串,然后返回这个字符串,但Web API控制器会自动对返回的字符串进行二次序列化,这就是为什么你手动替换斜杠后还是会出现的原因!

问题根源

当你返回string类型的结果时,Web API会把它当成普通文本,而不是已经序列化好的JSON。所以它会把你的JSON字符串里的双引号转义成\",也就是你看到的多余斜杠。你之前的Replace("\\", "")处理的是第一次序列化的结果,但二次序列化又把斜杠加回来了。

解决方案

有两种简单的办法可以解决这个问题:

方案1:直接返回对象,让控制器处理序列化

把方法的返回类型改成IHttpActionResult,直接返回DataTable对象,让Web API负责正确序列化,这样就不会有多余转义了:

public IHttpActionResult GetEmployeeDetails(string AccessCard) 
{
    DataTable dt = GetEmployeeByAccessCard(AccessCard);
    if (dt.Rows.Count > 0) 
    {
        return Json(dt);
    } 
    else 
    {
        return Json("No Data found");
    }
}

方案2:返回预序列化的JSON,告诉控制器不要二次处理

如果必须返回字符串类型,那就用HttpResponseMessage返回,并指定内容类型为application/json,这样控制器就会把它当作已完成的JSON直接返回,不会再序列化:

public HttpResponseMessage GetEmployeeDetails(string AccessCard) 
{
    DataTable dt = GetEmployeeByAccessCard(AccessCard);
    if (dt.Rows.Count > 0) 
    {
        string jsonResult = JsonConvert.SerializeObject(dt);
        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(jsonResult, Encoding.UTF8, "application/json")
        };
    } 
    else 
    {
        // 注意这里要把字符串用双引号包起来,符合JSON格式
        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent("\"No Data found\"", Encoding.UTF8, "application/json")
        };
    }
}

额外提醒

不要再用Replace("\\", "")这种手动处理的方式了,这很容易引入其他格式问题。正确的做法是让序列化机制只运行一次,要么让Web API处理对象,要么明确告诉它你返回的是已经序列化好的JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:01