Какая разница в намерениях между сериализаторами в FCL? - PullRequest
1 голос
/ 09 сентября 2010

Этот вопрос хорошо объясняет разницу в функциональности между сериализаторами.BinaryFormatter быстро, XmlSerializer совместимо и т. Д. Я знаю это.

Но в чем разница в намерении ?Для какого варианта использования был разработан каждый класс?

В частности:

  • Почему они решили сделать XmlSerializer слепым для личных данных, когда BinaryFormatter видит их достаточно быстро(через предположительно медленное отражение)
  • Почему они создали 3 отдельных сериализатора XML - XmlSerializer, SoapFormatter и DataContractSerializer?
  • Почему некоторые подписываются и некоторые отказываются-out?
  • Почему они сделали интерфейсы такими несовместимыми?Например, XmlSerializer не обеспечивает OnDeserializedCallback эквивалент.Другой пример - XmlSerializer использует IsNullable [XmlIgnore] для того, что BinarySerializer использует [OptionalField] и [NonSerialized].

1 Ответ

0 голосов
/ 09 сентября 2010

Сериализация XML используется для создания определенной структуры XML и позволяет изменить способ сериализации объекта - как выглядит XMl (если вы используете атрибуты или узлы и т. Д.).

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

SoapFormatter и DataContractSerializer используются для связи между компонентами .NET, обычно многоуровневым приложением - с DataContractSerializer, используемым в WCF, и SoapFormatter, используемым для более старых утилит SOAP.

...