I’m working with ASP.NET and jQuery on client side.
I’m using Json.NET to serialize data from the DB on the server side and I’m sending it to the client when an Ajax request arrives.
When I open FireBug, I see the following 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]"}
My code from server side:
[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);
}
My jQuery code:
$.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");
}
});
The ‘dialog’ variable is a jQuery UI modal dialog and the $.ajax code is in the dialog’s ‘open’ event handler…
What should I do to make the serialization result in a “correct” json format without any ‘\n’, ‘\r’ and ‘\’ ?
Thanks in advance!
You should not manually JSON serialize that List.
ASP.NET is already doing it for you automatically when you call it via POST and use a content-type of
application/json. So, you’re ending up with a doubly serialized response, and that is why you’ve found that you need to parse it a second time after jQuery has already parsed it once.If you use a return type of List and return the list directly, you should be in good shape.
More info: http://encosia.com/2011/04/13/asp-net-web-services-mistake-manual-json-serialization/