[Mono-dev] Custom surrogates and serialization
Chris Micacchi
mono at kinitos.com
Fri Sep 2 11:49:27 EDT 2005
Hi!
I've recently started a project trying to get some fairly complex
software that was written for .Net 1.1 working on Mono, and so far I've
found almost everything works quite well with minimal changes needed.
I have run into a few issues, and I’m hoping that someone can take a
look at them. I was able to boil down a few into small test cases, and
I've filed some bugs with my test cases attached (#75947 and #75950).
Please let me know if I need to provide more information for these issues.
I'm now working on some problems with Xml serialization, and this is
where the bulk of the problems I'm getting have been. The first is that
our software uses a custom serializer surrogate for
System.Net.IPAddress, in order to handle differences between .Net 1.0
and 1.1. On Mono, our custom serializer doesn't work; it gets the error
"The attempted operation is not supported for the type of object
referenced" instead. My surrogate code is:
public object SetObjectData(
System.Object obj,
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context,
System.Runtime.Serialization.ISurrogateSelector selector)
{
System.String ipStr = info.GetString( "address" );
System.Net.IPAddress newIP
= System.Net.IPAddress.Parse( ipStr );
System.Net.IPAddress ipAddress = (System.Net.IPAddress)obj;
// This line throws the exception
ipAddress.Address = newIP.Address;
return obj;
}
The problem seems to be that when the deserializer creates the new
IPAddress object the AddressFamily field ends up uninitialized, and the
Address property set fails.
Unfortunately the deserializer also mimics the .Net 1.0 behaviour where
the return value of SetObjectData is ignored, so I can't just create a
new IPAddress and return it instead (in .Net 1.1, this bug is supposedly
fixed).
I've got a few more issues I've found in the SOAP serializer using
surrogates, but I'm still working on tracking them down.
Thanks for any information anyone can provide!
Chris Micacchi
More information about the Mono-devel-list
mailing list