Как сравнить два графа объектов .NET по различиям? - PullRequest
10 голосов
/ 12 июля 2011

В нашем клиент-серверном приложении мы использовали BinaryFormatter для процесса сериализации. По соображениям производительности мы пытаемся перейти на protobuf-net (http://code.google.com/p/protobuf-net/).

Наше программное обеспечение передает огромные графики с циклами между клиентом и сервером.

Теперь я ищу способ убедиться, что данные, которые были сериализованы и десериализованы с использованием protobuf, точно такие же, как те, которые обычно обрабатывались BinaryFormatter.

Сравнение по частям просто: Я сериализую с помощью BinaryFormatter в файл. Десериализовать этот файл снова, используя BinaryFormatter. Затем я сериализую с помощью ProtoBuf в файл. Десериализовать с помощью ProtoBuf из этого файла. Сериализуйте снова, используя BinaryFormatter, в файл.

Тогда я могу просто сравнить этот файл с исходным файлом.

Однако эти два файла не равны на 100%. Поэтому теперь мне нужно найти способ отследить различия.

Может быть, есть какой-нибудь инструмент, который визуализирует данные, которые были сериализованы BinaryFormatter? Или вы знаете какого-то другого помощника, который делает глубокое сравнение и говорит мне, где различия?

Использование XMLSerializer и сравнение двух файлов XML невозможно, поскольку BinaryFormatter может сериализовать намного больше данных, чем XMLSerializer, даже без явной пометки полей.

Спасибо, TH

Ответы [ 2 ]

5 голосов
/ 22 сентября 2011

У нас была такая же проблема. Мы Json сериализуем два объекта (с форматированием, отступом, новыми строками и т. Д.), А затем используем простой текстовый diff. Он скажет вам не только, что они разные, но и в чем разница.

5 голосов
/ 12 июля 2011

Как насчет использования DataContractSerializer с включенным отслеживанием объектов (preserveObjectReferences в конструкторе).Это должно позволить вам сериализовать их в xml (по крайней мере, в некотором роде), где вы сможете сравнить различия.

...