Когда следует использовать сериализацию XML или двоичную сериализацию в .NET Framework?
Я запутался - когда следует использовать XML-сериализацию и когда я должен использовать Binary Serialization в .NET framework?
Ответы
Ответ 1
Конкретно для .NET. Если у вас есть два приложения, которые используют одну и ту же систему типов, вы можете использовать двоичную сериализацию. С другой стороны, если у вас есть приложения, которые находятся на разных платформах, рекомендуется использовать XML-сериализацию. Поэтому, если я пишу чат-приложение (клиент и сервер), я могу использовать двоичную сериализацию, но если позже я решу, что я должен использовать Python для написания клиента, то я не могу.
Ответ 2
Оба существующих ответа сосредоточены на "кросс-платформе", но это не связанная с этим проблема. То, что они делают, - "не используйте BinaryFormatter
, если вы делаете кросс-платформу", - которую я полностью поддерживаю. Однако существует ряд форматов двоичной сериализации, которые являются кросс-платформенными очень - protobuf/ASN.1.
Итак, давайте посмотрим вместо этого на то, что каждый может предложить;
- Двоичный файл обычно меньше, обычно быстрее обрабатывается (с обоих концов) и не легко читается человеком/редактируется.
- Текстовые форматы (xml/json) имеют тенденцию быть более подробными, чем двоичные (хотя часто сжимаются хорошо), но с ними легко работать; но вся эта обработка текста, связанная с отображением, делает их более медленными
- xml очень распространен, это веб-службы и преимущества поддержки gooling, такие как xsd, xslt и надежные редакторы xml.
- json является основным игроком в браузере (хотя он также используется в веб-сервисах) - имеет тенденцию быть менее формальным, но все же очень эффективным
Обратите внимание, что интероперабельность не является ни силой, ни слабостью, если вы выберете соответствующий двоичный формат!
Вот ответ, который сравнивает время сериализации, десериализацию и метрики пространства большинства сериализаторов .NET для вашей справки.
Ответ 3
Если вам нужен удобный или кросс-платформенный вывод, используйте XML.
Кроме того, сериализация XML использует публичные поля и свойства для сериализации, и вы можете изменять/форматировать вывод, используя атрибуты и пользовательскую сериализацию на уровне класса, если вы хотите.
Bin.Ser. использует частные поля для сериализации.