2011-12-06 2 views
5

Gson과 함께 순환 참조에 대한 많은 기사를 찾았지만 우아한 해결책을 찾을 수 없습니다. 내가 아는 한Gson "순환 참조"에 대한 해결책이 있습니까?

, 일부 솔루션은 다음과 같습니다

  • 는 "일시적"으로 순환 참조가 발생하는 속성을 설정합니다.
  • 일부 주석이있는 속성을 제외합니다.

일반적인 질문으로 문제를 해결하기위한 몇 가지 일반적인 전략이 있습니까?

+2

이상한 게임이기는 유일한 방법은 게임을하지 않는 것입니다. 다시 분할하여 순환 참조가 없도록하십시오. – DwB

+0

직렬화에만 관심이 있습니까? 아니면 직렬화 해제 중에 올바른 링크를 설정하는 것입니까? –

+0

예! http://stackoverflow.com/questions/10036958/the-easiest-way-to- : [1] [1] [GraphAdapterBuilder 예]를 포함하는 포스트를 살펴 보자 양방향 재귀 관계 제거 – ouba64

답변

2

내가 아는 한 Gson의 순환 참조에 대한 자동화 된 솔루션이 없습니다. 원형 참조를 자동으로 처리하는 유일한 JSON 제작 라이브러리는 XStream (Jettison 백엔드 포함)입니다.

편집 : Jackson은 @JsonIdentityInfo annotation으로 순환 참조 처리도 지원합니다. 그래서 자동은 아니지만 (객체 ID 처리가 필요한 참조를 표시해야 함) 대부분의 경우를 해결할 수 있습니다.

+1

Gson에는 순환 참조에 대한 자동 해결 방법이 없으며 Java 표시 이외의 직렬화 솔루션도 제공하지 않습니다. 건너 뛸 필드 및/또는 사용자 정의 직렬화 코드 작성. 또는 Jackson은 직렬화 및 비 직렬화 문제에 대한 주석 기반 솔루션을 제공합니다. http://www.cowtowncoder.com/blog/archives/2010/11/entry_434.html –

+0

에서 포인트 # 7을 참조하십시오. 감사합니다. 간접적으로 필드를 제외하여 문제를 해결했습니다. 그리고 자유 시간을 가질 때 XStream을 공부할 것입니다. –

+0

XStream에 하나 더합니다. 내가 찾은 유일한 해결책은 효과가있는 것 같습니다. –

-4

아시다시피, 최신 Gson 버전은 기계적 손상을 해결했습니다.

+0

은 방금 최신 버전 (2.3.1)을 사용해 보았습니다. – DaveB