.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
相关产品推荐
相关产品推荐

