2010-02-12 7 views
5

Estoy trabajando en un proyecto ASP.Net MVC y he estado aprendiendo algunos pequeños trucos con objetos JSON que me hicieron reírme por un buen rato. Por ejemplo, asegurándome de que cuando llamo $ .getJSON() desde jQuery, realmente necesito asegurarme de que mi JSON devuelve un objeto, no solo un valor de cadena (bueno, ¿verdad?).¿Cuáles son algunos errores clave al trabajar con las respuestas de Json?

¿Cuáles son algunas de las cosas clave a tener en cuenta al trabajar con objetos JSON y las respuestas en su experiencia? Estoy particularmente interesado en ASP.Net, pero podría ser cualquier idioma.

Respuesta

3

Un error desagradable json que me ha picado ocurrió cuando utilicé la serialización .Net dentro de un proyecto WCF para producir respuestas JSon para otro servicio. Era JSon perfectamente legal según un verificador en línea, pero el destinatario no se lo tragaría.

Resultó que el orden de los contenidos importaba. De acuerdo con las especificaciones de JSon, el orden no debería importar, pero aparentemente el consumidor del otro lado usó algún tipo de analizador personalizado que se ahogó cuando no encontró un determinado campo en la parte superior. El serializador pone los contenidos en orden alfabético.

Desesperado por un tiempo, hasta que descubrí que podía darle al serializador un pedido explícito a través de contratos de datos. Problema resuelto.

Ejemplo:

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

pone de matriz 'MyFoos' en la parte superior de la respuesta JSON.

Nota: si hace esto, asegúrese de dar a cada miembro de datos un pedido, porque los miembros de datos sin un número de orden todavía flotan en la parte superior.

1

Nunca envíe alimentaciones de línea o líneas nuevas. También debido a que el personaje se está escapando. SI está utilizando el .NET Json searilzer, entonces debe hacerse cargo de estas cosas, pero si lo hace usted mismo, debe tener cuidado.

También he notado que a veces las cadenas se envían/​​recuperan con espacios iniciales, así que asegúrese de llamar a .trim()!

Cuestiones relacionadas