2009-11-18 3 views
0

ASP.NET MVC 액션 내에 return Json(whatever);을 사용하여 JSON을 통해 내 페이지로 데이터를 반환합니다. jQuery를 사용하여 JSON 요청 및 이후 DOM 상호 작용을 수행합니다.ASP.NET MVC ControllerBase.Json()이 NHibernate 컬렉션에 유효한 JSON을 생성하지 못했습니다.

whatever에 컬렉션 멤버가있는 NHibernate 객체가 들어있는 경우 (즉, ISet 개체 포함) 콜백 함수는 jQuery에 의해 호출되지 않습니다.

우리는 jQuery를 사용하고 있습니다. & NHibernate는 최신 버전 인 ASP.NET MVC 버전 1.0입니다.

이 문제가 발생 했습니까? 어떻게 그 주변에서 일 했니? (ISet 's를 넘기지 않는 것을 제외하고)

+0

나는 NHibernate를 사용하지 않지만 출력 된 것을보기 위해 해당 동작을 수동으로 트리거 할 URL을 시도 했습니까? – Langdon

답변

0

발견. 내 Hibernate 객체는 순환 참조를 가졌다. 그 자체로 디자인 문제는 아니지만, JSON (표기법, 마음이 당신입니다)이 트리 기반이므로 순환 참조를 처리 할 수 ​​없으므로 예외가 발생했습니다.

예를 들어, JSON.net은 참조 루프를보다 잘 처리 할 수 ​​있지만, 내가 좋아했을만큼 정교하지는 않습니다.

+0

json.net (http://json.codeplex.com/)은 순환 참조를 지원합니다. 또한 http://www.west-wind.com/weblog/posts/442969.aspx를 참조하십시오. –

0

NHibernate가 넣은 주머니는 JSON에 올바르게 직렬화하는 것이 악명 높다. 나는 자식 컬렉션을 포함하여 값을 수동으로 할당 한 다음, Json 시리얼 라이저 리턴 메소드에 새 객체를 전달한다. 왜냐하면 모든 상태 가방 물건을 가지지 않기 때문이다.

0

빠른 방법은 데이터를 새로운 개체, 즉 직렬화 할 속성이있는 사용자 지정 클래스에 투영하는 것입니다.

다음과 같이 입력하십시오. LINQ를 사용하여 짧은 방법으로 반복한다고 가정 할 경우, foreach를 사용할 수 있습니다.

 var whatever = Myclass.Select(t => new MyJSonClass{ 
         p1 = t.property1, 
         p2= t.t.property2 
         }); 
     return Json(whatever); 
관련 문제