2010-11-24 5 views
2

이 주제와 관련하여 많은 의문점이 있음을 알고 있지만 해결 방법을 찾지 못해서 도움이된다고 생각합니다.nHibernate to Json

방금 ​​S # arp Architecture로 시작했고, nHibernate를 사용하기 전에 (MVC에 익숙하지 않은 경우도) 많이 사용하지 않았습니다.

관계형 데이터베이스에서와 같이 순환 참조가있는 nHibernate 개체에서 JSON을 반환하려고합니다. 나는 (Newtonsoft의 Json.NET을 사용하여)

return JsonConvert.SerializeObject(posts.ToArray(), Formatting.Indented, 
    new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, Converters = { new JavaScriptDateTimeConverter() } }); 

를 잘 작동하지만 내가 nHibernate 수와 함께 할 때 디버그 posts을 통해 조사 할 때 그냥 나에게 [{"Id":1}]을 제공 반대하지만, SQL Linq에 사용하던 다음 코드를 사용 분명히 그것에 대한 데이터를 가지고있다. (비록 어레이의 하나의 아이템이지만 여전히 그렇다) return Json(posts);을 사용하려고하면 순환 참조에 대해서 불만이 생길 뿐이다. 희망을 당신이 도와 줄 수 있기를 바랍니다 :-)

+0

혼란에 대해 죄송합니다. Json 프레임 워크가 섞여있어 - 내 답변이 삭제되었습니다. –

답변

2

마지막으로 이것을 해결 한 방법은 데이터 전송 객체에 모든 것을 넣는 것입니다. 이는 JSON으로 변환하려고했던 객체와 거의 동일합니다 그러나 그것은 순환 문제를 해결할 수있게 해주 었으며 다른 곳에서도 약간의 유연성을 제공합니다. 나는 그것이 최선의 해결책은 아니라고 확신하지만, 그것이 작동하고 다른 문제들을 해결할 수 있습니다. 나는 그냥 우아하게이기는하지만 문제 해결이

public object GetDTO() 
{ 
    object data = new 
    { 
     pageData = new 
     { 
      Id = Post.Id, 
      pageUrl = Post.URL, 
      title = Post.PageTitle, 
      description = Post.PageDescription, 
      user = Post.User.Name 
     } 
    }; 
    return data; 
} 

같은 것을했다.

0

난 당신이 나가는 DTO들을 만드는 데에만 관심이 있다면 당신은 내가 AutoMapper을 권 해드립니다 AutoMapper 또는 ValueInjector

에서 살펴 것을 권 해드립니다. 그 구성과 기본값은 ValueInjector보다 친숙합니다.