BinaryFormatter имеет очень необычные возможности, ничто другое не похоже на то, что он делает. Он может создать объект вашего класса без запуска его конструктора. И он может дать значение вашим свойствам без запуска методов доступа установщика свойств.
В остальном ничего особенного в этом нет, просто сохраняются значения полей вашего объекта класса. И восстанавливает их при десериализации объекта.
Не каждый класс подходит для такого обращения либо из соображений безопасности, либо из-за того, что значения полей слишком сильно зависят от состояния выполнения. Обратите внимание, насколько важна безопасность, поскольку злоумышленник может манипулировать сериализованными данными и привести ваш объект в несогласованное состояние, которое можно использовать. Скажем, свойство IsAdministrator. Хорошим примером критического состояния выполнения является свойство Control.Handle, оно никогда не может иметь то же значение при десериализации.
Это практические ограничения, которые класс BinaryFormatter не может решить сам по себе. Ему нужна помощь, явное подтверждение того, что это безопасно. Это не может быть формальным нормой, когда вы пишете код для де / сериализации объекта, это было бы легко, но на практике вы недостаточно знаете о классе, поскольку вы его не писали. Это необходимо автору класса, он делает это, задавая ему атрибут [Serializable].
person
Hans Passant
schedule
24.01.2016
BinaryFormatter
явно проверяет наличие этого атрибута и генерирует исключение, если оно отсутствует. - person user4003407   schedule 24.01.2016