Преобразование IEnumerable ‹T› в объекты JSON

С помощью JSON.NET я могу сериализовать общий список в строку JSON:

 return Json(new { success = true, data = JsonConvert.SerializeObject(units) });

но как я могу сериализовать общий список в объекты JSON. Это будет иметь то преимущество, что мне это не нужно на стороне клиента:

var jsonData = $.parseJSON(units);

person Elisabeth    schedule 28.05.2012    source источник


Ответы (2)


Не сериализуйте часть объекта, сериализуйте весь объект:

return Content(JsonConvert.SerializeObject(new { success = true, data = units }), "text/javascript");

Встроенный метод Json жестко запрограммирован для возврата результата, который использует встроенный (несколько ограниченный) сериализатор .NET JavaScript. Если вы хотите получить что-то столь же простое в использовании, добавьте свой собственный метод «Json» в свой базовый класс контроллера, который делает то же самое с Json.NET.

person Matti Virkkunen    schedule 28.05.2012
comment
используя ваш код, я получаю ошибку парсера. сериализация success = true вообще не требуется. Успех = истина проверяется в response.success обычным способом, я не могу изменить эту обработку. - person Elisabeth; 28.05.2012
comment
Ваш ответ в целом правильный. Это просто не подходило к этой особой ситуации, которая у меня с успехом = правда. Но я использую много других getJSON, где мне не нужен этот успех = правда. - person Elisabeth; 28.05.2012
comment
@Elisa: объект должен быть каким-то образом сериализован, чтобы его можно было передать по HTTP. Вы поняли, что я здесь делал? Если вы получили ошибку синтаксического анализа, продолжайте и исправляйте ее, поскольку я на самом деле не пробовал это. - person Matti Virkkunen; 29.05.2012

Просмотрите эту ссылку.
Я лично использую json2.js и JSON.parse / stringify для преобразования строк в ojbects и наоборот.

p.s это все еще выполняется на стороне клиента, но это просто еще одна строка кода для добавления

person YavgenyP    schedule 28.05.2012
comment
Почему не просто: JSON.parse (jsonString); он не поддерживается во всех браузерах, jquery.parseJSON (jsonstring) - это предпочтительный способ, который я уже использую, и это тоже сказано в ссылке, на которую вы ссылаетесь ;-) - person Elisabeth; 28.05.2012
comment
@Elisa, когда я искал способ выполнить преобразование в обе стороны, я не нашел ничего, что работало бы, кроме json2.js (не смог найти исходную ссылку SO, поэтому я использовал ее). Однако я помню, как читал, что даже создатель jquery рекомендует использовать json2.js - person YavgenyP; 28.05.2012
comment
stackoverflow.com/questions/3238842 / ПРОЧИТАЙТЕ решение. Это интересно. Ваш совет json2.js добавлен в мой список оптимизации на потом. - person Elisabeth; 28.05.2012