Создает ли сериализация различных, но равных графов объектов с помощью BinaryFormatter одинаковое двоичное представление?

Я рассматриваю хеширование объектной модели на основе ее сериализации.

Если я сериализую граф объектов с помощью .NET BinaryFormatter, будет ли сериализованное представление точно таким же, байт за байтом, для другого графа объектов, где все задействованные объекты состоят из одинаковых значений?

Интуитивно я так думаю, но я не уверен, могут ли идентификаторы объекта / ссылки как-то повлиять на фактическое сериализованное представление.

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


person Cumbayah    schedule 26.04.2011    source источник


Ответы (1)


Я не знаю, что это гарантировано, и из-за отсутствия документально подтвержденной гарантии я бы не стал лично на это полагаться. Особенно:

  • все, что реализует ISerializable (т. е. настраиваемую сериализацию), может делать все, что захочет
  • все, что связано с чем-то вроде словаря, может быть ненадежным - просто потому, что внутри словаря нет определенного порядка, и это может зависеть от свободного места в оригинале и восстановленном и т. д.
  • могут быть небольшие совместимые, но не идентичные изменения между платформами, версиями и т. д.

Однако, если вы говорите о двоичной эквивалентности, я понимаю, что вы говорите о хранении BinaryFormatter данных и последующем сравнении позже. Подчеркну: IMO, BinaryFormatter не подходит для хранения; это нормально (иш) для переноса данных между работающими системами, которые имеют общую платформу и версию приложения, но огромное количество раз, когда я видел, как люди застревали в яме из-за различий в версиях, и BinaryFormatter ошеломляет. По этим причинам я заинтересовался protobuf и написал свой собственный сериализатор, который будет подходящим для хранения и регидратации существующих объектных моделей, которые имеют "версионирование" в промежуточный.

person Marc Gravell    schedule 26.04.2011
comment
Благодарим за отзыв, и ваши предостережения должным образом приняты к сведению. Чтобы уточнить: я не планирую использовать BinaryFormatter для хранения, но как потенциальный ярлык для реализации определения, равны ли 2 объектные модели в ценностном смысле. То есть, я бы использовал его вывод в качестве входных данных для алгоритма хеширования. - person Cumbayah; 26.04.2011
comment
@Cumbayah, честно говоря, это заставило бы немного нервничать. Я мог бы рассмотреть что-нибудь с известным выходом, например json, и его хеширование. - person Marc Gravell; 26.04.2011
comment
Возможно, вам будет интересно взглянуть на этот проект, если вы его еще не видели: db4o.com - person Andrew Savinykh; 26.04.2011