Целостность ссылки в BinaryFormatter - PullRequest
8 голосов
/ 20 сентября 2011

Наличие опции AsReference в Protobuf-net и слово, что BinaryFormatter является «сериализатором графа», заставляют меня предположить, что BinaryFormatter не поддерживает ссылки и что он создает копию каждого объекта.

НоЯ провел несколько тестов и обнаружил, что все ссылки в одном вызове BinaryFormatter Serialize () или Deserialize () поддерживаются даже для рекурсивных ссылок.

Могу ли я подтвердить, что BinaryFormatter действительно поддерживает ссылки?Чем это отличается от Protobuf-net?Похоже, я неправильно понимаю "сериализацию графа"?Что еще я должен высматривать?

Заранее спасибо.

1 Ответ

7 голосов
/ 20 сентября 2011

ТЛ; др; версия - BinaryFormatter всегда сохраняет ссылки.

Тот факт, что BinaryFormatter является «сериализатором графа», является синонимом «он сохраняет ссылки», поскольку требуется для точного воспроизведения графа. Альтернатива - сериализатор дерево (что составляет большинство из них; XmlSerializer, DataContractSerializer (без включенной конкретной опции), JavascriptSerializer и Все протоколы protobuf-net без AsReference). Сериализаторы дерева не обычно сохраняют ссылки (если они не работают с некоторыми хитростями, то есть с тем, что DataContractSerializer делает, если вы включаете режим полного графа, или protobuf-net делает с AsReference). Сериализаторы деревьев (без включенного voodoo) имеют тенденцию взрываться в беспорядке с рекурсивной моделью, что облегчает их обнаружение.

...