【问题标题】:JSON + LazyLoadJSON + 延迟加载
【发布时间】:2011-08-26 16:31:11
【问题描述】:

伙计们,我遇到了这个问题......

我的 User 类有一个属性 UserType userType,如下所示:

    public class User
{
    public virtual int  Id { get; set; }
    public virtual string User { get; set; }
    public virtual string Name { get; set; }
    public virtual UserType userType { get; set; }
}

我不能像这样返回 JSON...

[HttpGet]
    public JsonResult JSONUsers(string q)
    {
        IEnumerable<User> model = dataServ.Users.GetUsers( q );
        return this.Json( new { Result = model }, JsonRequestBehavior.AllowGet );
    }

我收到一个错误:

检测到循环引用 在序列化类型对象时 'System.Reflection.RuntimeModule'。

我收到此错误的原因是延迟加载(至少我是这么理解的),为了解决这个问题,我做到了:

public JsonResult JSON(string q)
    {
        List<User> model = new List<User>();
        IEnumerable<User> users= dataServ.Users.Getusers( q );

        foreach (var item in users)
        {
            User user = new User
            {
                Id = item.Id,
                Name = item.Name
            };
            model.Add( user );
        };

        return this.Json( new { Result = model }, JsonRequestBehavior.AllowGet );
    }

我认为这不是一个好的解决方案。在这种情况下,我只需要 de "Id" 和 "Name" 属性,但如果我需要所有属性怎么办?是不是要一张一张的抄? 谁能告诉我是否有更好的解决方案?

谢谢,

蒂亚戈

【问题讨论】:

    标签: json asp.net-mvc-3 fluent-nhibernate


    【解决方案1】:

    Ayende 就这个问题写了一篇很棒的 series of blog posts

    但总结一下:USE VIEW MODELS =>顺便说一句,这是我正在回答的有关 ASP.NET MVC 的 StackOverflow 上一半以上问题的解决方案。

    【讨论】:

    • 好的,我可以使用视图模型,但是我会有 2 个类似的类。这真的是一个很好的选择吗?感谢分享您的知识。
    • @Thiago Guttierre,他们之间不会有循环引用。所以,是的,它们将是相似的(这就是AutoMapper 派上用场的地方)并且被认为是使用 ASP.NET MVC 时的最佳实践。
    猜你喜欢
    • 2020-05-25
    • 2017-12-28
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2021-07-13
    相关资源
    最近更新 更多