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格式的文件

C# 关于使用JavaScriptSerializer 序列化与返序列化的操作

JavaScriptSerializer 和 ValueTypes (struct)