【问题标题】:Don't want to JSON serialize the whole list of classes不想 JSON 序列化整个类列表
【发布时间】:2010-03-09 11:40:32
【问题描述】:

我的应用程序中有一个 IList 的站点,并且站点具有大量属性。

我想将此列表转换为 JSON 以在类似于此的下拉列表中使用

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

我的问题是我只想使用站点类的 id 和 name 属性。我在想一种解决方法是使用一个“适配器”类,然后只公开这两个属性,然后我会序列化它。

我的问题是我想让这个类通用,以便它可以处理任何对象列表。有没有人遇到过类似的情况并解决了?

编辑:我不能使用[ScriptIgnore] 属性,因为我可能确实想序列化整个类。

【问题讨论】:

    标签: c# json serialization adaptor


    【解决方案1】:

    你能从你的网站列表中创建一个匿名类吗?

    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的列表。

    【讨论】:

    • 很好的解决方案,但不是必须的: var sites = SiteRepository.FindAllSites().Select(x => new { Id = x.Id, Name = x.Name }); ?
    【解决方案2】:

    如果您使用 [ScriptIgnore] (System.Web.Script.Serialization) 装饰类字段,C# 将在使用 Json 进行序列化期间忽略它们,其方式与使用 [XmlIgnore] 装饰用于 Xml 序列化的方式非常相似。

    MSDN

    【讨论】:

    • 对不起,我应该在问题中提到这一点。有时我想序列化整个 Site 类以通过 ajax 请求将其传回
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多