2010-02-12 4 views
5

Я работаю над проектом ASP.Net MVC и изучал несколько небольших трюков с объектами JSON, которые заставили меня почесать голову довольно долго. Например, гарантируя, что, когда я вызываю $ .getJSON() из jQuery, мне действительно нужно убедиться, что мой JSON возвращает объект, а не только строковое значение (ну, D'uh! Right?).Каковы некоторые ключевые проблемы при работе с ответами Json?

Каковы основные моменты, которые следует учитывать при работе с объектами и ответами JSON в вашем опыте? Меня особенно интересует ASP.Net, но может быть любым языком.

ответ

3

Одна неприятная ошибка json, которая укусила меня, произошла, когда я использовал сериализацию .Net в проекте WCF для создания ответов JSon для другой службы. Это был совершенно законный JSon в соответствии с онлайн-верификатором, но получатель не проглотил его.

Оказалось, что порядок содержания имеет значение. Согласно спецификации JSon, порядок не должен иметь значения, но, видимо, потребитель с другой стороны использовал какой-то пользовательский парсер, который задыхался, когда он не нашел определенное поле вверху. Сериализатор помещает содержимое в алфавитном порядке.

Я некоторое время отчаялся, пока не узнал, что я могу дать сериализатору явное упорядочение через контракты данных. Задача решена.

Пример:

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

помещает массив 'MyFoos' в верхней части ответа JSon.

Примечание: если вы это сделаете, обязательно дайте каждому члену данных заказ, поскольку данные без номера заказа будут по-прежнему плавать вверх.

1

Никогда не отправляйте линейные каналы или новые линии. Также из-за ухода шамана. Если вы используете поисковик .NET Json, тогда он должен позаботиться об этих вещах для вас, но если вы это сделаете сами, вам нужно быть осторожным.

Также я заметил, что иногда строки отправляются/извлекаются с ведущими пробелами, поэтому обязательно вызывайте .trim()!

Смежные вопросы