Very strange, considering that the types have the [Serializable] attribute, both the GeoData type (referenced by SqlGeo* types) as well as the SqlGeo* types. If you are using Fast Serialization, you should try the TypeSurrogates feature of the fast serializer. The SerializationWriter and SerializationReader class have both a static property called 'TypeSurrogates'. This property returns a list of IFastSerializationTypeSurrogate instances. You should implement that interface on a class and implement the serialize/deserialize methods plus the SupportsType method which should return true for the SqlGeo* type you're using and then add an instance of this class to the TypeSurrogates property of both SerializationWriter and SerializationReader at application startup.
In the implementation of that interface, use the string serialization capabilities of the SqlGeo* types to serialize/deserialize the types. as binary serialization fails for some reason (as it otherwise wouldn't throw this exception).
If you're not using fast serialization, please switch on fast serialization, if you're using adapter. If you're using selfservicing, there's little we can do, I'm afraid, other than that you implement a surrogate for the type yourself for the binary formatter (see MSDN, but documentation is scarce), which isn't as easy as for fastserialization built into the framework.