【问题标题】: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)');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 1970-01-01
        相关资源
        最近更新 更多