Не хочу JSON сериализовать весь список классов - PullRequest
1 голос
/ 09 марта 2010

У меня есть IList Сайтов в моем приложении, и Сайт имеет большое количество свойств.

Я хочу преобразовать этот список в JSON для использования в выпадающем списке, подобном этому

    var sites = SiteRepository.FindAllSites();
    return new JsonResult() { Data = sites, JsonRequestBehavior = JsonRequestBehavior.AllowGet };

Проблема в том, что я хочу использовать только свойства id и name класса сайта.Я решил обойти это путем использования класса «адаптера», который бы затем выставлял только эти два свойства, а затем сериализовал бы это.

Проблема, которую я имею, заключается в том, что я хочу сделать класс универсальным,что он может обрабатывать любой список объектов.Кто-нибудь сталкивался с подобной ситуацией и решил ее?

РЕДАКТИРОВАТЬ: Я не могу использовать атрибут [ScriptIgnore], поскольку может быть случай, когда я хочу сериализовать весь класс.

Ответы [ 2 ]

4 голосов
/ 09 марта 2010

Можете ли вы создать анонимный класс из списка сайтов?

var sites = SiteRepository.FindAllSites().Select(x=> new { Id=x.Id, Name=x.Name});

Поскольку FindAllSites(), кажется, возвращает IList, который происходит от IEnumberable, вы должны иметь возможность использовать методы расширения System.Linq (т.е. Select()). Это преобразует List<Site> (со всеми свойствами) в IEnumerable<some_anon_class> (только с 2 свойствами), которое затем передается этой вещи JsonResult вместо списка Site.

0 голосов
/ 09 марта 2010

Если вы украсите свои поля класса с помощью [ScriptIgnore] (System.Web.Script.Serialization), C # будет игнорировать их во время сериализации с использованием Json почти так же, как при оформлении с помощью [XmlIgnore] для сериализации Xml.

* MSDN 1004 *

...