Ethan,
Thanks for the quick response. Serialization of MapPrinterLayer works without error. However, now there is an exception when trying to deserialize MapPrinterLayer. I have identified the problem in the xml created when MapPrinterLayer is serialized. It seems to be related to the earlier issue. This is only a problem when the application is running as a 64 bit process. Here is the problem xml:
<mapImageCache>
<nativeImage inherit="true" type="System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<nativeImage>136862936</nativeImage>
</nativeImage>
<mapImageCache>
<nativeImage inherit="true" type="System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<nativeImage>2280503954080</nativeImage>
</nativeImage>
<imageBytes>iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAA1JREFUGFdjYGBgYAAAAAUAAYoz4wAAAAAASUVORK5CYII=</imageBytes>
</mapImageCache>
The native image tag <nativeImage>2280503954080</nativeImage>
is the cause of the exception:
System.OverflowException was unhandled
HResult=-2146233066
Message=Value was either too large or too small for an Int32.
Source=mscorlib
StackTrace:
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.WyQ=(Type type, String value)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.CreateMemberObject(String memberName, Type memberType, Object memberOwner, GeoObjectNode memberNode)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.WiQ=(GeoObjectNode node, Object result)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.VSQ=(GeoObjectNode node, String typeName)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.CreateMemberObject(String memberName, Type memberType, Object memberOwner, GeoObjectNode memberNode)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.WiQ=(GeoObjectNode node, Object result)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.VSQ=(GeoObjectNode node, String typeName)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.CreateMemberObject(String memberName, Type memberType, Object memberOwner, GeoObjectNode memberNode)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.WiQ=(GeoObjectNode node, Object result)
at ThinkGeo.MapSuite.Serialize.GeoObjectModeler.VSQ=(GeoObjectNode node, String typeName)
at ThinkGeo.MapSuite.Serialize.GeoSerializer.Deserialize(String sourcePathFilename, GeoFileReadWriteMode readWriteMode)
at Serialization_Bug.Form1.mSerialize() in C:\Users\ZipPa\Documents\Visual Studio 2015\Projects\Serialization Bug\Form1.vb:line 39
at Serialization_Bug.Form1.Form1_Load(Object sender, EventArgs e) in C:\Users\ZipPa\Documents\Visual Studio 2015\Projects\Serialization Bug\Form1.vb:line 19
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
InnerException:
Again, only a problem when the program is compiled so that it runs as a 64 bit process. It has taken me all day to figure out that the 64-bit issue was causing the problem. I have modified my sample project to reproduce this issue and here it is.
Serialization Bug_2.zip (77.7 KB)
Please have a try and see what happens.
Thanks!
Steve