asp.net - json 响应包含\n\r

标签 asp.net serialization jquery json.net

我正在客户端使用 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        \"TraitName\": \"a\",\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    \"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        \"TraitName\": \"a\",\r\n        \"Description\": \"aaa\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"CategoryID\": 1,\r\n    \"CategoryName\": \"c\",\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        \"TraitName\": \"a\",\r\n        \"Description\": \"aaa\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"CategoryID\": 1,\r\n    \"CategoryName\": \"d\",\r\n    \"Description\": \"bla bla\",\r\n    \"CategoryType\": \"Professional\",\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        \"TraitName\": \"a\",\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”事件处理程序中...

我应该怎么做才能使序列化结果成为“正确”的 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/

关于asp.net - json 响应包含\n\r,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116952/

相关文章:

c# - 我们如何处理 gridview/datalist 中下拉列表的 onselectedindexchanged 事件?

c# - 添加 Controller 时无法检索模型的元数据

java - 序列化对象时更改字段名称

javascript - 如何从所选文本复制格式?

asp.net - 如何允许用户在 Web 应用程序中编辑附件?

asp.net - 当调用命中缓存时,OutputCache 发送错误的 Vary header

PHP - 序列化一个具有静态属性的类

c# - 具有属性的集合的 Xml 序列化

JavaScript 类扩展了 onclick 函数

javascript - Speak.js 中的女声