c# JavaScriptSerializer 序列化字符串具有反斜杠,导致 javascript 出现问题
Posted
技术标签:
【中文标题】c# JavaScriptSerializer 序列化字符串具有反斜杠,导致 javascript 出现问题【英文标题】:A c# JavaScriptSerializer serialized string has backslashs that cause problems in 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 &
我该如何解决这个问题?
【问题讨论】:
【参考方案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)');
【讨论】:
以上是关于c# JavaScriptSerializer 序列化字符串具有反斜杠,导致 javascript 出现问题的主要内容,如果未能解决你的问题,请参考以下文章
泛型/JSON JavaScriptSerializer C#
c# JavaScriptSerializer 序列化字符串具有反斜杠,导致 javascript 出现问题
从 C# 程序中反序列化 JSON 时,我是不是需要使用 JavaScriptSerializer 以外的任何东西?
C#中用JavaScriptSerializer和Json.Net操作json格式的文件