【问题标题】:A c# JavaScriptSerializer serialized string has backslashs that cause problems in javascriptc# JavaScriptSerializer 序列化字符串具有反斜杠,导致 javascript 出现问题
【发布时间】:2013-02-08 16:10:17
【问题描述】:
我在 ASP.NET MVC 视图中有一行 c# 代码
string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);
如果我调试这个字符串是
"{\"Age\":14}"
因此,当我将此字符串分配给我的 javascript 代码时,它会失败
JSON.parse('@json');
消息是
Uncaught SyntaxError: Unexpected token &
我该如何解决这个问题?
【问题讨论】:
标签:
asp.net-mvc
json
serialization
javascriptserializer
jsonserializer
【解决方案1】:
看起来你至少在使用 MVC3,所以尝试使用:
JSON.parse( @Html.Raw(json) );
这会产生一个 HtmlString 类型,因此您可以将 json 的类型改为 HtmlString,而不是 System.String。此外,您可能想查看更好的 JSON.NET 库(我相信这也是 MVC4 中的默认值)。
【解决方案2】:
导致问题的不是反斜杠,而是 HTML 编码。实际上字符串中根本没有任何反斜杠,这只是调试器显示带有引号的字符串的方式。
@ 命令将对字符串进行 HTML 编码,因此代码如下所示:
JSON.parse('{"Age":14}');
使用Raw方法输出不带HTML编码的字符串:
JSON.parse('@Raw(json)');