Bug in binary/soap formatters..beware!  
Jeff Key
12/3/2002 8:16:25 PM
Chalk up four hours lost to a bug in .NET.

The binary and soap formatters have a bug where they don't use the value
returned from ISerializationSurrogate.SetObjectData, which is
disappointing because it seems like a primary reason why someone would
want to use a serialization surrogate.

Background:
A serialization surrogate lets you control the serialization of OTHER
types.  If you have a type that you need to manually handle the
serialization, but can't change the code for that type, you would use a
surrogate.  For example, you may be using a component that includes type
A.  You have an object graph you need to serialize that contains type A,
but the graph won't serialize because A doesn't have the Serializable
attribute.  You can create a surrogate for type A, tell the
BinaryFormatter about it, then have the surrogate handle the
serialization.  

Theoretically, and by the definition of the interface, you _should_ be
able to return a completely different type.  This is my situation.  I
have a base class that isn't abstract.  There are a number of classes
that extend this base class, but I'm also using the base class by
itself.  I've run into a situation where I need to "cast up" one of the
base class instances to a derived type when deserializing, to maintain
backwards compatibility.  I _should_ be able to implement a surrogate
and, in the SetObjectData method, return whatever type of object I see
fit.  Unfortunately I can't.

Back to the drawing board.....

-jk
		
Back to dotnet