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

将JSON字符串数组转为List:Ajax传参至C#控制器遇反斜杠解析问题

解决Ajax传递JSON字符串到C#控制器无法解析为List的问题

我太懂你这糟心的情况了——用JSON.stringify处理后的数组传到C#控制器,结果变成了带反斜杠的转义字符串,本来想遍历每个国家,结果foreach完全没法正常工作。本质原因是C#把这个转义后的内容当成了单个完整字符串,而不是数组对象,自然没法直接迭代。下面给你两种实用的解决方案:

方案一:让jQuery自动处理序列化(推荐)

其实根本没必要手动用JSON.stringify,jQuery的Ajax可以自动帮你把JS数组序列化成正确的JSON格式,直接让控制器接收强类型的List<string>就行,省心又不容易出错:

前端Ajax代码:

var countryArray = ["Germany", "Brazil", "United States"];

$.ajax({
    url: "/YourController/YourAction",
    type: "POST",
    contentType: "application/json; charset=utf-8", // 关键:告诉后端这是JSON数据
    data: JSON.stringify(countryArray), // 配合contentType,这里的stringify是正确打开方式
    success: function(response) {
        // 处理返回结果
    }
});

如果你的jQuery版本较新,甚至可以直接传数组(不过保险起见还是保留stringify和contentType,兼容性更好):

data: countryArray,

后端C#控制器代码:

using System.Collections.Generic;
using System.Web.Mvc; // ASP.NET Core用Microsoft.AspNetCore.Mvc

public class YourController : Controller
{
    [HttpPost]
    public ActionResult YourAction(List<string> countryList)
    {
        foreach (var cntry in countryList)
        {
            // 这里就能正常遍历每个国家了
            // 比如做一些数据处理:Logger.LogInformation($"当前国家:{cntry}");
        }
        return Json(new { success = true });
    }
}

这样控制器会自动把前端传来的JSON数组绑定到List<string>上,完全不需要手动解析。

方案二:手动解析转义后的字符串(特殊场景下用)

如果因为某些限制,你只能传递转义后的字符串(比如后端接收参数必须是string类型),那可以用Json.NET(Newtonsoft.Json)来手动反序列化:

后端C#代码:

先确保你的项目安装了Newtonsoft.Json NuGet包,然后:

using Newtonsoft.Json;
using System.Collections.Generic;
using System.Web.Mvc;

public class YourController : Controller
{
    [HttpPost]
    public ActionResult YourAction(string countryList)
    {
        // 自动处理转义字符,把字符串还原成List<string>
        List<string> countries = JsonConvert.DeserializeObject<List<string>>(countryList);
        
        foreach (var cntry in countries)
        {
            // 正常执行你的遍历逻辑
        }
        return Json(new { success = true });
    }
}

JsonConvert.DeserializeObject会自动识别转义的双引号,把带反斜杠的字符串还原成正常的数组。

为什么会出现反斜杠?

简单来说:当你手动JSON.stringify后,字符串里的双引号会被转义成\";如果前端没设置正确的contentType,后端会把整个JSON字符串当成普通的字符串参数接收,所以就会看到带反斜杠的内容。设置contentType: "application/json"后,后端会识别出这是JSON数据,自动完成模型绑定,转义问题就消失了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:43:22