json-Antwort enthält \n \r
Arbeite ich mit ASP.NET und jQuery auf der client-Seite.
Ich bin mit Json.NET zum serialisieren von Daten aus der DB auf der server-Seite, und ich werde senden Sie es an den client, wenn eine Ajax-Anfrage ankommt.
Wenn ich öffne FireBug, sehe ich folgenden 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]"}
Mein code von der server-Seite:
[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);
}
Mein 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");
}
});
Den 'dialog' variable ist ein jQuery UI modal-dialog und den $.ajax-code in das Dialogfeld 'öffnen' event-handler...
Was sollte ich tun, um die Serialisierung zu einem "richtigen" json-format ohne '\n', '\r' und '\' ?
Vielen Dank im Voraus!
InformationsquelleAutor Sash | 2011-05-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht manuell JSON zu serialisieren, die Liste.
ASP.NET bereits tut es automatisch für Sie, wenn Sie rufen es per POST und verwenden Sie einen content-type
application/json
. Also, Sie sind am Ende mit einem doppelt serialisiert Antwort, und das ist, warum Sie feststellen, dass Sie brauchen, um zu analysieren, es ein zweites mal nach jQuery hat bereits analysiert es einmal.Wenn Sie einen Rückgabetyp Liste und Rückgabe der Liste direkt, Sie sollten in guter Form sein.
Mehr info: http://encosia.com/2011/04/13/asp-net-web-services-mistake-manual-json-serialization/
InformationsquelleAutor Dave Ward
Könnten Sie versuchen
return JsonConvert.SerializeObject(list, Formatting.None);
Haben Sie sich diese Frage im Zusammenhang mit ASP.NET+jQuery, wie man JSON Deserialisieren?. Möglicherweise etwas zu tun mit dem Content-Type-header.
EDIT: Siehe Kommentare, es war kein Parsen der JSON.
Bin ich etwas fehlt oder nicht, Sie zu haben, parse in ein Objekt zuerst?
Natürlich haben Sie Recht! Ich fügte hinzu,$.parseJSON und alles funktioniert nun... vielen Dank!!!
InformationsquelleAutor ColWhi
Entsprechend der JSON-Spezifikation: "Leerzeichen eingefügt werden kann, die zwischen jedem paar von Token."
http://www.json.org/
Also keine sorgen machen.
Oder Lesen Sie über JSON-Formatierung hier http://james.newtonking.com/projects/json/help/ReducingSerializedJSONSize.html
InformationsquelleAutor z5h