Когда мне следует использовать XML-сериализацию против двоичной сериализации в .NET Framework? - PullRequest
15 голосов
/ 20 января 2011

Я в замешательстве - когда мне следует использовать сериализацию XML и когда мне следует использовать двоичную сериализацию в .NET Framework?

Ответы [ 3 ]

35 голосов
/ 20 января 2011

Оба существующих ответа сосредоточены на «кроссплатформенности», но это не имеет отношения к делу. Они утверждают, что «не используйте BinaryFormatter, если вы используете кроссплатформенность», - что я полностью поддерживаю. Однако существует ряд форматов двоичной сериализации, которые очень кроссплатформенные - протобуф / ASN.1 являются яркими примерами.

Итак, давайте посмотрим на то, что каждый может предложить;

  • Двоичный файл обычно меньше, обычно быстрее обрабатывается (на обоих концах) и не так легко читается / редактируется человеком
  • Текстовые форматы (xml / json), как правило, более многословны, чем двоичные (хотя часто хорошо сжимаются), но с ними довольно легко работать вручную; но вся эта обработка текста при отображении имеет тенденцию делать их медленнее
    • xml очень часто встречается в веб-сервисах и имеет такую ​​поддержку, как xsd, xslt и надежные редакторы xml
    • json является основным игроком в связи через браузер (хотя он также используется в веб-сервисах) - имеет тенденцию быть менее формальным, но все же очень эффективным

Обратите внимание, что совместимость не является ни сильной, ни слабой стороной, пока вы выбираете подходящий двоичный формат!

Вот ответ , который сравнивает время сериализации, десериализацию и метрики пространства большинства сериализаторов .NET для вашей справки.

13 голосов
/ 20 января 2011

Специфично для .NET. Если у вас есть два приложения, использующих одну и ту же систему типов, вы можете использовать двоичную сериализацию. С другой стороны, если у вас есть приложения, которые находятся на разных платформах, то рекомендуется использовать XML-сериализацию. Поэтому, если я пишу приложение чата (клиент и сервер), я мог бы использовать двоичную сериализацию, но если позже я решу, что мне следует использовать Python для написания клиента, то я не могу.

2 голосов
/ 20 января 2011

Если вы хотите дружественный к пользователю или кроссплатформенный вывод, то используйте XML.Кроме того, XML-сериализация использует открытые поля и свойства для сериализации, и вы можете изменить / переформатировать вывод, используя атрибуты и пользовательскую сериализацию на уровне класса, если хотите.Bin.Ser.использует приватные поля для сериализации.

...