Scopro direttamente dalla bocca di Peter de Jong, il papà della serializzazione .NET (cioè dalle sue slide presentate al secondo Rotor Workshop come "History, Architecture, and Implementation of the CLR Serialization and Formatter classes") che:
Constructor is not in Interface, so compiler can’t check whether it present
Constructor isn’t inherited, so each subclass needs its own constructor
Earlier version used SetObjectData instead of constructor
e più avanti nella conferenza:
ISerializable underwent many changes
E' quello che notavo in un mio post anteriore sull'asimmetria dell'ISerializable - quindi nelle prime versioni c'era anche SetObjectData! Sicuramente motivi di performance hanno determinato il disegno attuale.
Per chi vuole vedere il video della presentazione (1h 11' - 83MB)