JSON + LazyLoad

时间:2011-05-16 18:51:38

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

伙计们,我对此有疑问......

我的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'。

我收到此错误的原因是Lazy-Load(至少这是我所理解的),并且很难解决它,我做了:

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”属性,但是如果我需要所有属性呢?我必须一个一个地复制吗? 任何人都能告诉我是否有更好的解决方案吗?

谢谢,

蒂亚戈

1 个答案:

答案 0 :(得分:3)

Ayende写了一篇关于这个问题的伟大series of blog posts

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