2010-02-12 11 views
5

Sto lavorando su un progetto ASP.Net MVC e sto imparando alcuni piccoli trucchi con oggetti JSON che mi hanno fatto scalfire la testa per un bel po '. Ad esempio, assicurando che quando chiamo $ .getJSON() da jQuery, in realtà devo assicurarmi che il mio JSON restituisca un oggetto, non solo un valore di stringa (beh, D'uh! Giusto?).Quali sono alcuni trucchi chiave quando si lavora con le risposte JSON?

Quali sono alcune delle cose fondamentali da tenere a mente quando si lavora con oggetti JSON e le risposte nella propria esperienza? Sono particolarmente interessato a ASP.Net, ma potrebbe essere qualsiasi lingua.

risposta

3

Un brutto bug JSON che mi ha morso si è verificato quando ho usato la serializzazione .Net all'interno di un progetto WCF per produrre risposte JSon per un altro servizio. Era perfettamente legale JSon secondo un verificatore online, ma il destinatario non l'avrebbe inghiottito.

Si è scoperto che l'ordine dei contenuti contava. Secondo JSon spec l'ordine non dovrebbe avere importanza, ma a quanto pare il consumatore all'altra estremità usava una sorta di parser personalizzato che soffocava quando non trovava un certo campo nella parte superiore. Il serializzatore inserisce i contenuti in ordine alfabetico.

Mi sono disperata per un po ', fino a quando ho scoperto che potevo dare al serializzatore un ordine esplicito tramite contratti di dati. Problema risolto.

Esempio:

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

mette un array 'MyFoos' nella parte superiore della risposta JSON.

Nota: se si esegue questa operazione, assicurarsi di assegnare a ciascun membro dati un ordine, poiché i membri dei dati senza un numero di ordine continueranno a spostarsi verso l'alto.

1

Non inviare mai feed di linea o nuove linee. Anche a causa della fuga di caratteri. SE stai usando il searilzer .NET Json, allora dovresti occuparti di queste cose per te, ma se lo fai da solo devi essere attento.

Inoltre ho notato che talvolta le stringhe vengono inviate/recuperate con spazi iniziali, quindi assicuratevi di chiamare .trim()!

Problemi correlati