2011-09-20 3 views
8

Protobuf-net에 AsReference 옵션이 있고 BinaryFormatter가 "그래프 직렬 변환기"라는 단어는 BinaryFormatter가 참조를 유지하지 않으며 모든 개체의 복사본을 만드는 것으로 가정합니다.참조 무결성 BinaryFormatter

하지만 몇 가지 테스트를 수행하고 단일 BinaryFormatter Serialize() 또는 Deserialize() 호출의 모든 참조가 재귀 참조에서도 유지된다는 것을 알았습니다.

BinaryFormatter가 참으로 참조를 유지하는지 확인할 수 있습니까? Protobuf-net과 다른 점은 무엇입니까? "그래프 직렬화"가 잘못 이해 된 것 같습니다. 그 밖의 무엇을 찾아야합니까?

미리 감사드립니다.

답변

7

tl; dr; 버전 - BinaryFormatter은 항상 참조를 유지합니다.

BinaryFormatter이 "그래프 직렬화 기"라는 사실은 정확히 이 필요하므로 그래프를 정확하게 재현하려면 "참조를 보존합니다"와 동의어입니다. (; 모든 트리를 기반으로 AsReference없이 XmlSerializer가 특정 옵션을 사용하지 않고 DataContractSerializer이 (활성화), JavascriptSerializer 및 protobuf - 그물 그들 중 가장입니다) 대안은 나무 시리얼입니다. Tree serializer는 이 아니며은 일반적으로 참조를 유지합니다 (풀 그래프 모드를 사용 설정하거나을 사용하는 경우 DataContractSerializer이 수행함). 트리 시리얼 라이저 (부두 가능 없음)는 재귀 모델로 혼란에 빠지기 쉽기 때문에 쉽게 찾아 낼 수 있습니다.