2010-02-12 9 views
5

Ich arbeite an einem ASP.Net MVC-Projekt und habe ein paar kleine Tricks mit JSON-Objekten gelernt, die mich eine ganze Weile den Kopf kratzen ließen. Stellen Sie beispielsweise sicher, dass ich beim Aufruf von $ .getJSON() von jQuery sicherstellen muss, dass mein JSON ein Objekt zurückgibt, nicht nur einen String-Wert (na ja, D'uh! Oder?).Was sind einige wichtige Probleme beim Arbeiten mit JSON-Antworten?

Was sind einige der wichtigsten Punkte, die Sie bei der Arbeit mit JSON-Objekten und Antworten beachten sollten? Ich bin besonders an ASP.Net interessiert, könnte aber jede Sprache sein.

Antwort

3

Ein böser JSON-Bug, der mich gebissen hat, ist aufgetreten, als ich die .Net-Serialisierung in einem WCF-Projekt verwendete, um JSon-Antworten für einen anderen Dienst zu erstellen. Laut einem Online-Verifizierer war es JSon vollkommen legal, aber der Empfänger würde es nicht schlucken.

Es stellte sich heraus, dass die Reihenfolge der Inhalte zählte. Laut JSon-Spezifikation sollte die Reihenfolge keine Rolle spielen, aber anscheinend verwendete der Kunde am anderen Ende eine Art von benutzerdefiniertem Parser, der erstickte, wenn er kein bestimmtes Feld an der Spitze fand. Der Serializer stellt den Inhalt in alphabetischer Reihenfolge dar.

Ich verzweifelte für eine Weile, bis ich herausfand, dass ich dem Serializer eine explizite Bestellung über Datenverträge geben konnte. Problem gelöst.

Beispiel:

[DataMember(Order = 1)] //<-- thank Zod this exists! 
public List<Foo> MyFoos { get; set; } 

setzt einen Array 'MyFoos' an der Spitze der JSon Antwort.

Hinweis: Wenn Sie dies tun, achten Sie darauf, jedem Datenelement eine Reihenfolge zu geben, da Datenelemente ohne eine Bestellnummer weiterhin nach oben schweben.

1

Senden Sie niemals Zeilenumbrüche oder neue Zeilen. Auch wegen Characer entkommen. Wenn Sie den .NET Json seariltzer verwenden, dann sollte es sich um diese Dinge kümmern, aber wenn Sie es selbst tun, müssen Sie vorsichtig sein.

Auch ich bemerkte manchmal Zeichenfolgen werden mit führenden Leerzeichen gesendet/abgerufen, also stellen Sie sicher, dass Sie .trim() aufrufen!

Verwandte Themen