.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
相关产品推荐
相关产品推荐

