It seems like I can serialize classes that don\'t have that interface, so I am unclear on its purpose.
With the ISerializable
you can write custom methods in your object to take over serialization when doing binary serialization, to serialize your objects in a different manner than what the default approach used by BinaryFormatter will do.
In other words, if the default approach serializes your object in a different manner than how you want it to serialize as, you can implement ISerializable for complete control. Note that hand in hand with ISerializable, there's also a custom constructor you should implement.
XmlSerialization will of course only use properties, ISerializable has nothing to do with XML serialization.
Thanks Marc and Pop for the comments, I was a bit hasty with my first answer.