在 ASP.NET Core 8 中使用返回 JsonResult 序列化字符串列表时,它会生成一个带有单引号而不是双引号的字符串数组,如下所示。
['测试1'、'测试2'、'测试3'、'测试4']
我期望 JSON 输出如下。
[“测试1”,“测试2”,“测试3”,“测试4”]
据我了解,JSON 字符串数组需要双引号。 因此,我无法使用 javascript/jQuery 解析它。
在我的 ASP.NET Core 控制器中,我使用:
public async Task<JsonResult> RemotesearchGetPath(string id)
{
var model = await formulaHelper.GetPathTree(id);
return Json(model);
}
其中模型的类型为字符串列表
public async Task<List<string>> GetPathTree(string id)
{
var treeId = ParseTreeId(id);
return await GetPathTree(treeId);
}
在javascript中,我有以下代码,使用console.log查看从服务器返回的json:
function getFormulaSearchPath(id,callback)
{
var getFormulaSearchPathUrl = "@(Html.Raw(WebUtility.UrlDecode(Url.Action("RemotesearchGetPath", "Home"))))";
var request = {
DataSetId: "@(Model.Database.DatabaseId)",
id: id};
$.get(getFormulaSearchPathUrl, request, function (e) {
console.log("getFormulaSearchPath", e)
var paths = jQuery.parseJSON(e);
console.log('paths', paths);
if(callback)
callback(e);
});
}
请注意,此 javascript 代码是我的 Razor 代码,因此正在翻译 @(Model.Database.DatabaseId)。 我只是注意到它实际上不再用作操作方法的输入参数,因此可以删除。
jQuery.parseJSON 无法解析带有单引号的 JSON 数组列表,因为它需要双引号。
有什么方法可以用双引号序列化字符串列表吗?
在 ASP.NET Core 中,建议使用
IActionResult
而不是 JsonResult
,以便在返回各种响应类型时获得更大的灵活性和一致性。
此外,请确保您的控制器继承自
ControllerBase
而不是 Controller
。这很重要,因为 ControllerBase
是专门为 API 设计的,并提供了一组更轻、更集中的功能。