실습을 위해 serializer (C#)를 구현하려는 경우 순환 식 참조에서 해당 serializer가 실패하지 않도록하는 것이 좋습니다.순환 참조를 사용하여 개체 그래프 직렬화 방법 접근 방식
아직 해결되지 않은 개체를 직렬화하고 존재하지 않는 개체는 건너 뛸 수 있습니다. 이는 인스턴스를 해싱 (hash)하여 쉽게 수행 할 수 있습니다.
제안 된 솔루션은 "개체의 ID를 정의하는 것은 무엇입니까?"라는 질문을 제안합니다. GetHashCode 및 Equals 메서드를 사용합니다. 이것은 직렬화시 시간을 절약하고 비 직렬화시 메모리를 보존하는 수용 가능한 솔루션입니다.
그러나 많은 인스턴스가 동일한 ID를 가지고 있지만 아직 직렬화 된 도메인에서 완전히 다른 것들에 사용될 수 있으므로 나중에 동일한 인스턴스가 도메인 논리를 위반하게 될 수 있으므로 항상 바람직한 결과는 아닙니다. .
그런 serializer의 저자로서, 나는 그러한 결정을 내리기 위해 호출자에게 맡겨야한다.
이 문제를 해결하기위한 한 가지 방법은 컬렉션을 반복하고 각 포함 된 요소에서 ReferenceEquals를 호출하여 직렬화 된 인스턴스와 직렬화되지 않은 인스턴스를 구별하는 것입니다. 이 방법이 효과적이지만 성능은 현저히 낮습니다.
또 다른 접근법은 관리되지 않는 힙에 개체를 고정하고 고정 된 개체 주소를 ID로 사용하는 것입니다.이 개체는 과도한 잔인 함으로 보이며 많은 오버 헤드가 있습니다.
또 다른 접근법은 리플렉션을 사용하여 모든 인스턴스의 Object.Equals 및 Object.GetHashCode 기본 구현을 호출하는 것인데, 이는 문제를 해결하는 것으로 보이지만 약간의 오버 헤드가 있습니다.
내 질문은 : 내가 제시 한 방법에 놓친 어떤주의 사항이
1)이 있습니까?
2) 생각지도 못했던 추가 접근법이 있습니까?
제안 된 첫 번째 방법을 사용하는 것이 좋습니다. 나는 당신의 의견을 소중하게 생각하지만 내 두 가지 질문에 답하지 않습니다. 또는 나는 무엇인가 놓치고 있냐? –