2010-02-12 4 views
5

Je travaille sur un projet ASP.Net MVC et ont appris quelques petits trucs avec des objets JSON qui m'a fait me gratter la tête pendant un bon moment. Par exemple, en m'assurant que quand j'appelle $ .getJSON() de jQuery, j'ai vraiment besoin de m'assurer que mon JSON retourne un objet, pas seulement une valeur de chaîne (bien, D'uh! Right?).Quelles sont les principales pièges lorsque vous travaillez avec les réponses JSON?

Quelles sont quelques-unes des principales choses à surveiller lorsque vous travaillez avec des objets JSON et les réponses dans votre expérience? Je suis particulièrement intéressé par ASP.Net, mais pourrait être n'importe quelle langue.

Répondre

3

Un bug JSON méchant qui m'a mordu a eu lieu quand je sérialisation .Net dans un projet WCF pour produire des réponses JSON pour un autre service. Il était parfaitement légal JSon selon un vérificateur en ligne, mais le destinataire ne l'avalerait pas.

Il est avéré que l'ordre du contenu importé. Selon JSon spec l'ordre ne devrait pas importer, mais apparemment le consommateur à l'autre extrémité a utilisé une sorte d'analyseur personnalisé qui s'est étouffé quand il n'a pas trouvé un certain champ au dessus. Le sérialiseur met le contenu dans l'ordre alphabétique.

J'ai désespéré pendant un petit moment, jusqu'à ce que j'ai découvert que je pouvais donner au sérialiseur une commande explicite via des contrats de données. Problème résolu.

Exemple:

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

met un tableau 'MyFoos' en haut de la réponse JSON.

Remarque: si vous faites cela, veillez à donner un ordre à chaque membre de données, car les membres de données sans numéro de commande continueront de flotter vers le haut.

1

Ne jamais envoyer des flux en ligne ou de nouvelles lignes. Aussi à cause du characier s'échappant. si vous utilisez la searilzer Json .NET il doit prendre soin de ces choses pour vous, mais si vous ce faire vous-même, vous devez être très vigilant.

J'ai aussi remarqué que parfois les chaînes sont envoyées/récupérées avec des espaces de début, alors assurez-vous d'appeler .trim()!

Questions connexes