2011-05-16 2 views
0

얘들 아, 나는이 문제를 ... 참있어JSON + LazyLoad

내 사용자 클래스 속성 UserType을의 유저 유형 아래와 같이있다 :처럼, 나는 JSON을 반환 할 수

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

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

:이 ...

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

나는 오류를 받고 있어요 나는이 오류를 받고 있어요

이유는 (그게 내가 이해 무엇 적어도), 그리고 가난을 해결하기 위해 게으른 -로드, 내가 그랬어 :

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

내가이는 생각하지 않습니다 좋은 해결책. 이 경우에는 "Id"및 "Name"속성 만 있으면되지만 모든 속성이 필요한 경우에는 어떻게합니까? 하나씩 복사해야합니까? 더 나은 해결책이 있다면 누구나 말해 줄 수 있습니까?

감사합니다,

티아고

답변

3

는 Ayende은이 문제에 대해 좋은 series of blog posts을 썼다.

USE VIEW MODELS => 그리고 내가 대답 한 ASP.NET MVC에 대한 StackOverflow에 대한 질문 중 절반 이상을 해결하는 방법으로 설명합니다.

+0

좋아요,보기 모델을 사용할 수는 있지만 비슷한 클래스가 2 개 있습니다. 이것은 정말 좋은 선택입니까? 너의 지식을 나누기위한 Tks. – Thiago

+0

@ Thiago Guttierre, 그들 사이에 순환 참조가 없을 것입니다. 그래, 그들은 (AutoMapper (http://automapper.codeplex.com/)가 유용 할 때와 유사 할 것입니다.) ASP.NET MVC로 작업 할 때 모범 사례로 간주됩니다. –

관련 문제