Основываясь на моем понимании, SerializableAttribute не предоставляет никаких проверок времени компиляции, как это было сделано во время выполнения. Если это так, то почему требуется, чтобы классы были помечены как сериализуемые?
Не может ли сериализатор просто попытаться сериализовать объект, а затем сработает? Разве это не то, что он делает прямо сейчас? Когда что-то помечено, он пытается и терпит неудачу. Не было бы лучше, если бы вам пришлось пометить вещи как unserializable, а не сериализуемые? Таким образом, у вас не возникло бы проблемы с библиотеками, которые не маркировали бы вещи как сериализуемые?