2013-05-09 5 views
3

Galaxy에 StarSystems가 있고 StarSystem에 행성이 포함되어 있고 Planet에 포함 된 JSON.NET에서 객체 그래프를 직렬화하려고합니다. 식민지에는 소유자가 있으며, 은하에는 Empires 목록이 있으며, 각 목록에는 탐색 된 StarSystems 목록이 있습니다. StarSystem, Planet, Empire 사이에는 순환 참조가 있습니다.JSON.NET은 순환 참조를 자동으로 무시하고이를 해결하기 위해 체인의 임의 링크를 null로 설정합니다.

내가 이해하지 못하는 것은 객체 그래프를 직렬화 할 때의 동작입니다. 참조 루프를 기본으로 설정하여 처리 할 때 오류가 발생하는 대신 직렬화 모드로 설정했을 때 모든 것을 직렬화하려고하면 체인에서 몇 개의 링크를 직렬화 한 다음 임의의 값을 설정하고 설정하는 것 같습니다. (내 경우 탐험 된 별 시스템)을 null로 설정하십시오. 당연히 이것은 스타 시스템을 찾을 때 응용 프로그램의 다른 곳에서 충돌을 일으키지 만 널 (null) 만 찾습니다!

체인의 일부 링크가 직접 참조가 아니라 콜렉션이라는 사실과 관련이 있습니까? 예 : 제국에는 하나의 탐구 된 별 체계가 없지만 그것들의 목록이 있습니다.

그렇다면 JSON.NET이 모든 것을 직렬화하도록하려면 어떻게해야합니까? 순환 참조를 제거하고 객체 모델에서 실제 객체 참조 대신 객체의 ID를 전달해야합니까? 나는 단지 직렬화를 위해서 그런 것을하고 싶지 않다.

+1

코드가 있습니까? –

+0

JSON.NET은 개체 그래프를 직렬화하거나 올바르게 복원하는 데 문제가 없어야합니다. 대부분 코드가 손상되었을 가능성이 큽니다 (예 : 속성 설정자에서 예기치 않은 작업 수행). 몇 가지 코드를 게시하십시오 .. –

+0

어떤 코드가 유용 할 지 모르겠습니다 - 시리얼 라이저를 호출 할 때 코드? 다른 것? (게임을 저장하고 다시로드하지 않고 메모리 내에서 작업하면 모든 것이 정상적으로 보입니다.) – ekolis

답변

0

내가 어떻게했는지 잘 모르겠지만 지금은 탐색 된 별표 시스템 목록을 바꾸는 대신 탐색 된 별표 시스템 목록에 null이 추가 된 것처럼 보입니다. 그래서 필터링 할 수 있습니다. 죄송합니다.이 문제를 해결하기 위해 무엇을했는지 전혀 알지 못합니다!

+0

그리고 지금 나는 널 널을 다시 얻고있다. 그것은 완전히 무작위입니다. – ekolis

+0

실제로 무작위가 아닙니다. 스타 시스템이 제국에 포함되기보다는 JSON에서 제국의 $ ref를 통해 참조 될 때 문제가있는 것 같습니다. – ekolis

1

해결 방법이 생겼습니다. 탐색 된 별 시스템 목록을 저장하는 각 제국 대신에 각 별 시스템은 탐색 한 제국 목록을 저장합니다. 이 방법은 순환 참조가 없습니다!