Просто взвесить ...
Очевидное различие между ними - «двоичный файл против xml», но оно намного глубже:
- поля (
BinaryFormatter
= bf) против public члены (обычно свойства) (XmlSerializer
= xs)
- на основе типа метаданных (bf) по сравнению с контрактом (xs)
- версия-хрупкая (bf) против версии-устойчивой (xs)
- "график" (bf) против "дерева" (xs)
- .NET специфично (bf) и переносимо (xs)
- непрозрачный (bf) и читаемый человеком (xs)
В качестве обсуждения того, почему BinaryFormatter
может быть хрупким, см. Здесь .
Невозможно обсудить, что больше; все метаданные типа в BinaryFormatter
могут увеличить его. И XmlSerializer
может работать со сжатием как gzip.
Однако можно взять сильные стороны каждого; например, Google открыл свой собственный формат сериализации данных, «буферы протокола». Это:
- контрактный
- переносимый (см. список реализаций )
- версия толерантная
- древовидный
- непрозрачный (хотя есть инструменты для отображения данных в сочетании с .proto)
- обычно " контракт первый ", но некоторые реализации допускают неявные контракты, основанные на отражении
Но важно то, что это очень плотные данные (без метаданных типа, чисто двоичное представление, короткие теги, трюки, такие как кодирование base-7 с вариабельной длиной), и они очень эффективны для обработки (нет сложной структуры XML, нет строк для сопоставления члены и т. д.).
Я мог бы быть немного предвзятым; Я поддерживаю одну из реализаций (включая несколько подходящих для C # /. NET), но вы заметите, что я не
связан с любой конкретной реализацией; формат имеет свои достоинства; -p