开发者

JSON + LazyLoad

Guys, I'm havin a problem with this...

My User class has a property UserType userType like below:

    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; }
}

I can't return a JSON, like this...

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

I'm getting an error:

A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'.

The reason I'm getting this error is the Lazy-Load (at least that's what I understood), and to poorly solve it, I did:

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 );
    }

I don't think this i开发者_运维问答s a good solution. In this case I only need de "Id" and "Name" properties, but what if I need all properties? Will I have to copy one by one? Can Anybody tell me if there is a better solution?

Thanks,

Thiago


Ayende wrote a great series of blog posts about this problem.

But to summarize: USE VIEW MODELS => and by the way that's the solution to more than half of the questions on StackOverflow about ASP.NET MVC that I am answering.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜