When implementing the ISerializable interface in C#, we provide a constructor which takes a SerializationInfo object, and then queries it with various
ISerializable
SerializationInfo
You can iterate over the available fields and use switch, though...
switch
foreach(SerializationEntry entry in info) { switch(entry.Name) { ... } }
Or you could use protobuf-net ;-p