json响应包含nr



我在客户端使用ASP.NET和jQuery。

我使用Json.NET在服务器端序列化DB中的数据,并在Ajax请求到达时将其发送到客户端。

当我打开FireBug时,我看到以下json:

{"d":"[rn  {rn    "CategoryID": 1,rn    "CategoryName": "a",rn    "Description": "123",rn    "CategoryType": "Personal",rn    "Traits": [rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      },rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      }rn    ]rn  },rn  {rn    "CategoryID": 1,rn    "CategoryName": "b",rn    "Description": "bla bla",rn    "CategoryType": "Professional",rn    "Traits": [rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      },rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      }rn    ]rn  },rn  {rn    "CategoryID": 1,rn    "CategoryName": "c",rn    "Description": "123",rn    "CategoryType": "Personal",rn    "Traits": [rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      },rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      }rn    ]rn  },rn  {rn    "CategoryID": 1,rn    "CategoryName": "d",rn    "Description": "bla bla",rn    "CategoryType": "Professional",rn    "Traits": [rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      },rn      {rn        "TraitID": 1,rn        "TraitName": "a",rn        "Description": "aaa"rn      }rn    ]rn  }rn]"}

我的服务器端代码:

    [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'和'\'?

提前感谢!

您不应该手动对该List进行JSON序列化。

当您通过POST调用ASP.NET并使用内容类型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

相关内容

  • 没有找到相关文章

最新更新