json响应包含\\\\ n \\\\ r

问题描述

| 我正在客户端上使用ASP.NET和jQuery。 我正在使用Json.NET对服务器端数据库中的数据进行序列化,并在Ajax请求到达时将其发送给客户端。 打开FireBug时,看到以下json:
{\"d\":\"[\\r\\n  {\\r\\n    \\\"CategoryID\\\": 1,\\r\\n    \\\"CategoryName\\\": \\\"a\\\",\\r\\n    \\\"Description\\\": \\\"123\\\",\\r\\n    \\\"CategoryType\\\": \\\"Personal\\\",\\r\\n    \\\"Traits\\\": [\\r\\n      {\\r\\n        \\\"TraitID\\\": 1,\\r\\n        \\\"TraitName\\\": \\\"a\\\",\\r\\n        \\\"Description\\\": \\\"aaa\\\"\\r\\n      },\\r\\n      {\\r\\n        \\\"TraitID\\\": 1,\\r\\n        \\\"Description\\\": \\\"aaa\\\"\\r\\n      }\\r\\n    ]\\r\\n  },\\r\\n  {\\r\\n    \\\"CategoryID\\\": 1,\\r\\n    \\\"CategoryName\\\": \\\"b\\\",\\r\\n    \\\"Description\\\": \\\"bla bla\\\",\\r\\n    \\\"CategoryType\\\": \\\"Professional\\\",\\r\\n    \\\"CategoryName\\\": \\\"c\\\",\\r\\n    \\\"CategoryName\\\": \\\"d\\\",\\r\\n        \\\"Description\\\": \\\"aaa\\\"\\r\\n      }\\r\\n    ]\\r\\n  }\\r\\n]\"}
我在服务器端的代码:
    [WebMethod]
public static string LoadRatingForm()
{
    bll_Trait t1 = new bll_Trait();
    t1.TraitID = 1;
    t1.TraitName = \"a\";
    t1.Description = \"aaa\";

    bll_Trait t2 = new bll_Trait();
    t2.TraitID = 1;
    t2.TraitName = \"a\";
    t2.Description = \"aaa\";

    bll_Trait t3 = new bll_Trait();
    t3.TraitID = 1;
    t3.TraitName = \"a\";
    t3.Description = \"aaa\";

    bll_Trait t4 = new bll_Trait();
    t4.TraitID = 1;
    t4.TraitName = \"a\";
    t4.Description = \"aaa\";



    bll_Category c1 = new bll_Category();
    c1.CategoryID = 1;
    c1.CategoryName = \"a\";
    c1.CategoryType = \"Personal\";
    c1.Description = \"123\";
    c1.Traits.Add(t1);
    c1.Traits.Add(t2);

    bll_Category c2 = new bll_Category();
    c2.CategoryID = 1;
    c2.CategoryName = \"b\";
    c2.CategoryType = \"Professional\";
    c2.Description = \"bla bla\";
    c2.Traits.Add(t3);
    c2.Traits.Add(t4);

    bll_Category c3 = new bll_Category();
    c3.CategoryID = 1;
    c3.CategoryName = \"c\";
    c3.CategoryType = \"Personal\";
    c3.Description = \"123\";
    c3.Traits.Add(t1);
    c3.Traits.Add(t2);

    bll_Category c4 = new bll_Category();
    c4.CategoryID = 1;
    c4.CategoryName = \"d\";
    c4.CategoryType = \"Professional\";
    c4.Description = \"bla bla\";
    c4.Traits.Add(t3);
    c4.Traits.Add(t4);

    List<bll_Category> list = new List<bll_Category>();
    list.Add(c1);
    list.Add(c2);
    list.Add(c3);
    list.Add(c4);

    return JsonConvert.SerializeObject(list,Formatting.Indented);
}
我的jQuery代码:
$.ajax({
            type: \"POST\",url: \"MyProfile.aspx/LoadRatingForm\",data: \"{}\",contentType: \"application/json; charset=utf-8\",dataType: \"json\",success: function (response) {
                var html;
                var categories = response.d;
                $.each(categories,function (i,category) {
                    // create 
                    //while (category.CategoryType == \"Professional\") {
                    //
                    //}

                    html += category.CategoryName + \" \";
                });
                dialog.append(html);
            },error: function () {
                alert(\"ERROR\");
            }
        });
\'dialog \'变量是jQuery UI模态对话框,$。ajax代码位于对话框的\'open \'事件处理程序中... 我应该怎么做才能使序列化结果为\“ correct \” json格式而没有任何\'\\ n \',\'\\ r \'和\'\\\'? 提前致谢!     

解决方法

您不应该手动JSON序列化该列表。 当您通过POST调用内容类型为
application/json
的ASP.NET时,它已经为您自动进行了处理。因此,您将得到一个双重序列化响应,这就是为什么您发现需要在jQuery解析一次之后再次解析它的原因。 如果使用List的返回类型并直接返回列表,则状态应良好。 更多信息:http://encosia.com/2011/04/13/asp-net-web-services-mistake-manual-json-serialization/     ,你可以试试
return JsonConvert.SerializeObject(list,Formatting.None);
您是否看过与ASP.NET + jQuery有关的问题,如何反序列化JSON?可能与Content-Type标头有关。 编辑:看到注释,没有JSON的解析。     ,根据JSON规范:\“可以在任意一对标记之间插入空格。” http://www.json.org/ 所以不用担心。 或在此处阅读有关JSON格式的信息http://james.newtonking.com/projects/json/help/ReducingSerializedJSONSize.html     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...