Бинарная сериализация довольно мощная, она может создавать экземпляр класса без запуска конструктора и может устанавливать поля в вашем классе, которые вы объявили закрытыми. Обычный код, конечно, не может этого сделать. Применяя атрибут [Serializable], вы явно даете ему добро, чтобы связываться с вашими личными частями. И вы неявно даете это разрешение только классу BinaryFormatter.
Сериализация XML не нуждается в таком порядке, она только сериализует открытые элементы.
DataContractSerializer может также сериализовать приватных членов. Поэтому он снова нуждается в явном одобрении, теперь с атрибутом [DataContract].