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

如何无需转换为JSON将C#数组传入JavaScript数组?及转义报错解决

解决C#数组转JSON到前端时含双引号报错的问题

这个问题我之前也碰到过,核心原因是你直接把序列化后的JSON字符串嵌入到JavaScript的单引号字面量里时,JSON里的双引号会提前闭合字符串,导致JavaScript语法错误,自然jQuery.parseJSON就会抛出异常。比如当Message是hello "world"时,序列化后的JSON是{"Message":"hello \"world\""},嵌入到'<%= result %>'后就变成了'{"Message":"hello "world""}'——这里hello后面的双引号直接结束了单引号包裹的字符串,剩下的内容完全不符合语法。

下面给你几个靠谱的解决方法:

方法一:直接将JSON作为JavaScript对象嵌入(推荐)

JSON本身就是合法的JavaScript对象字面量,所以不需要把它包裹成字符串再解析。直接把序列化后的结果赋值给变量即可:

后台C#代码不变:

JavaScriptSerializer _serializer = new JavaScriptSerializer();
string result = _serializer.Serialize(myList);

前端JavaScript代码改成:

var alerts = <%= result %>;

这样页面渲染后会直接生成合法的JavaScript数组,比如:

var alerts = [{"Id":1,"Message":"hello \"world\""}];

完全不需要jQuery.parseJSON,直接就能使用alerts数组,既高效又避免了转义问题。

方法二:对JSON字符串进行JavaScript转义

如果你必须用字符串解析的方式,可以用HttpUtility.JavaScriptStringEncode把序列化后的JSON转成合法的JavaScript字符串字面量:

后台C#代码:

JavaScriptSerializer _serializer = new JavaScriptSerializer();
string result = _serializer.Serialize(myList);
// 对字符串进行JavaScript转义
string encodedResult = HttpUtility.JavaScriptStringEncode(result);

前端JavaScript代码:

var alerts = jQuery.parseJSON('<%= encodedResult %>');

JavaScriptStringEncode会把所有可能破坏字符串结构的字符(比如双引号、单引号、换行符等)都转义,确保嵌入到单引号里的字符串是完全合法的。

方法三:换用更标准的JSON序列化库(Json.NET)

JavaScriptSerializer是比较老旧的库,推荐换成Newtonsoft.Json(也就是Json.NET),它的序列化更标准,处理特殊字符也更可靠:

后台C#代码(需要先安装Newtonsoft.Json NuGet包):

string result = JsonConvert.SerializeObject(myList);

然后同样用方法一的方式直接嵌入到前端:

var alerts = <%= result %>;

这个方案既解决了转义问题,也让序列化的结果更符合JSON标准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:43:20