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

.NET Core 2.2 API返回存储过程JSON结果去除外层双引号问题

解决.NET Core API返回JSON字符串外层带双引号的问题

这个问题我之前也碰到过,本质是因为你把存储过程返回的JSON数组当成普通字符串来处理了,ASP.NET Core的JSON序列化器会把它当作文本转义,所以才会多出外层的双引号。给你几个可行的解决办法:

方法1:定义实体类映射,直接返回强类型对象

这是最规范的做法,先定义对应JSON结构的实体类,再把存储过程返回的JSON字符串反序列化为实体集合:

步骤1:创建实体类

// 对应JSON数组里的单个对象
public class SizeItem
{
    public int ID { get; set; }
    public string SizeCode { get; set; }
}

// 修改你的API返回对象,把SizeChart改成集合类型
public class Details
{
    public List<SizeItem> SizeChart { get; set; }
}

步骤2:反序列化并返回

假设你从存储过程获取到的JSON字符串是jsonResult,处理代码如下:

// 使用Newtonsoft.Json反序列化(如果用System.Text.Json语法类似)
var sizeList = JsonConvert.DeserializeObject<List<SizeItem>>(jsonResult);
var response = new Details { SizeChart = sizeList };

// 返回给前端
return Ok(response);

这样API返回的结果就会是:

{"SizeChart":[{"ID":213,"SizeCode":"Small"},{"ID":257,"SizeCode":"S/M"},{"ID":214,"SizeCode":"Medium"},{"ID":215,"SizeCode":"Large"}]}

方法2:使用JArray动态处理(无需定义实体类)

如果不想创建实体类,可以用Newtonsoft.Json的JArray类型来接收JSON数组:

修改返回对象

public class Details
{
    public JArray SizeChart { get; set; }
}

解析并赋值

var jsonArray = JArray.Parse(jsonResult);
var response = new Details { SizeChart = jsonArray };
return Ok(response);

这种方式和方法1的返回效果一致,适合快速处理不确定结构的JSON。

方法3:直接返回原始JSON内容

如果不需要封装在Details对象里,想直接返回存储过程的JSON数组,可以用Content方法指定媒体类型:

// 直接返回原始JSON,不经过实体映射
return Content(jsonResult, "application/json");

此时API会直接输出:

[{"ID":213,"SizeCode":"Small"},{"ID":257,"SizeCode":"S/M"},{"ID":214,"SizeCode":"Medium"},{"ID":215,"SizeCode":"Large"}]

为什么原来的写法会出问题?

当你把JSON字符串赋值给string类型的SizeChart属性时,序列化器会把它当作普通文本处理:它会转义字符串内部的双引号,然后在外层再套一层双引号,最终就变成了你看到的带引号的字符串格式。只要让序列化器识别出这是JSON结构而非普通文本,就能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:06:51