ASP.NET Core 8返回JsonResult时字符串列表单引号替代双引号问题
问题分析与解决
核心误解澄清
你在浏览器控制台看到的单引号数组(['test1', 'test2', ...])只是浏览器的格式化展示方式,ASP.NET Core的JsonResult默认使用System.Text.Json序列化,生成的是完全符合JSON规范的双引号格式内容(["test1", "test2", ...]),不存在序列化错误。
解析失败的真正原因
你的JavaScript代码存在逻辑错误:$.get会根据响应的Content-Type自动解析JSON数据,回调函数中的参数e已经是解析完成的数组对象,而非JSON字符串。此时调用jQuery.parseJSON(e),会先将数组对象转为字符串(也就是你看到的单引号格式),再尝试解析,这自然不符合JSON规范,导致解析失败。
解决方案
直接移除多余的jQuery.parseJSON调用,直接使用e即可,它已经是你需要的字符串数组。
修正后的JavaScript代码
function getFormulaSearchPath(id, callback) { var getFormulaSearchPathUrl = "@(Html.Raw(WebUtility.UrlDecode(Url.Action("RemotesearchGetPath", "Home"))))"; var request = { id: id // 移除未使用的DataSetId参数 }; $.get(getFormulaSearchPathUrl, request, function (e) { console.log("getFormulaSearchPath", e); // e已经是解析好的字符串数组 console.log('paths', e); // 直接使用e即可 if(callback) callback(e); }); }
可选优化:明确指定响应类型
可以给$.get添加dataType: 'json'参数,明确告知jQuery预期接收JSON格式响应,代码可读性更强:
$.get({ url: getFormulaSearchPathUrl, data: request, dataType: 'json', success: function (e) { console.log("getFormulaSearchPath", e); console.log('paths', e); if(callback) callback(e); } });
验证实际响应格式的方法
如果想确认真实的响应内容,可在浏览器开发者工具的「网络」标签中找到该请求,查看「响应」或「预览」标签,这里会显示标准的双引号JSON数组。
内容的提问来源于stack exchange,提问作者jaccil
相关产品推荐
相关产品推荐

