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

.NET Core中C#对象序列化为JS可用JSON的引号转义问题

解决C#对象序列化JSON后在Razor视图中引号转义为"的问题

这个问题我之前也碰到过,核心原因是Razor视图引擎默认会对输出的字符串进行HTML编码,所以你用JsonConvert.SerializeObject生成的JSON里的双引号被转成了HTML实体",导致JavaScript无法识别为有效的JSON对象。下面是几种简单有效的解决方案:

方法一:使用Html.Raw()避免HTML编码

直接在输出JSON的时候用Html.Raw()包裹,告诉Razor不要对这段字符串进行编码,这样双引号就能原样保留在JavaScript代码里:

@{ var dataJson = JsonConvert.SerializeObject(Model); } 
<script> 
function ChangeGroup(type) { 
    $.ajax({ 
        url: '/your/api/endpoint', 
        data: @Html.Raw(dataJson) 
    }); 
} 
</script>

方法二:先将JSON赋值给JS变量(更推荐)

把序列化后的JSON先赋值给一个JavaScript变量,这样代码可读性更好,也方便后续在多个地方复用这个数据:

@{ var dataJson = JsonConvert.SerializeObject(Model); } 
<script> 
// 将JSON直接转为JavaScript对象
var modelData = @Html.Raw(dataJson);

function ChangeGroup(type) { 
    $.ajax({ 
        url: '/your/api/endpoint', 
        data: modelData 
    }); 
} 
</script>

注意事项

使用Html.Raw()的时候要注意XSS安全问题:如果你的Model包含用户输入的内容,一定要先做过滤或验证,避免恶意脚本被直接输出到页面中。如果是可信的后端生成数据,那这个方法完全没问题。

另外你不需要修改JsonConvert.SerializeObject的序列化配置——它本身已经生成了标准的JSON格式,问题出在Razor的输出编码环节,而非序列化过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:49:58