JSON + LazyLoad - PullRequest
       3

JSON + LazyLoad

0 голосов
/ 16 мая 2011

Ребята, у меня проблема с этим ...

Мой класс 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 Ответ

3 голосов
/ 16 мая 2011

Айенде написал большую серию постов в блоге об этой проблеме.

Но подведем итог: ИСПОЛЬЗУЙТЕ МОДЕЛИ ВИДА => и, кстати, это решение более половины вопросов StackOverflow о ASP.NET MVC, на которые я отвечаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...