ThinkGeo.com    |     Documentation    |     Premium Support

GeoSerializer: Error deserializing - Invalid character in the given encoding

Hi Folks,



I am trying to use GeoSerializer to serialize/deserialize a ZoomLevelSet. The serialization and deserialization processes goes perfectly as long as there`s no special characters on the style names… For example… I have this style:

…(file contents)



<Element inherit=“true” type=“ThinkGeo.MapSuite.Core.ValueStyle, MapSuiteCore, Version=7.0.0.0, Culture=neutral, PublicKeyToken=0828af5241fb4207”><!–</code–>div><div><span class=“Apple-tab-span” style=“white-space:pre”>   

<name>Situação Florestal<!–</code–>name>

<columnName>FORESTSITUATIONDESCRIPTION<!–</code–>columnName><valueItems>




…(file contents)




<valueitems> When I deserialize I use this code:


   GeoSerializer serializer = new GeoSerializer();                                    
   featureLayerToRestore.ZoomLevelSet = (ZoomLevelSet)serializer.Deserialize(layerElementFromLayout.Element(“ZoomLevelSet”).Value);



I am getting an XMLException: Invalid character in the given encoding. Line 47, position 20. (Where line 47 position 20 = ç)

The call stack:



    System.Xml.dll!System.Xml.XmlTextReaderImpl.Throw(System.Exception e) + 0x46 bytes  
    System.Xml.dll!System.Xml.XmlTextReaderImpl.Throw(string res, string arg) + 0x75 bytes  
    System.Xml.dll!System.Xml.XmlTextReaderImpl.InvalidCharRecovery(ref int bytesCount = 6041, out int charsCount = 0) + 0xc6 bytes 
    System.Xml.dll!System.Xml.XmlTextReaderImpl.GetChars(int maxCharsCount) + 0x84 bytes    
    System.Xml.dll!System.Xml.XmlTextReaderImpl.ReadData() + 0xbd bytes 
    System.Xml.dll!System.Xml.XmlTextReaderImpl.ParseText(out int startPos = 0, out int endPos = 0, ref int outOrChars = 0) + 0x1ed bytes   
    System.Xml.dll!System.Xml.XmlTextReaderImpl.FinishPartialValue() + 0x3f bytes   
    System.Xml.dll!System.Xml.XmlTextReaderImpl.Value.get() + 0x4b bytes    
>   MapSuiteCore.dll!ThinkGeo.MapSuite.Core.XmlGeoSerializationFormatter.xhQ=(System.Xml.XmlReader 8hU= = {System.Xml.XmlReader.XmlReaderDebuggerDisplayProxy}) + 0x1b0 bytes   
    MapSuiteCore.dll!ThinkGeo.MapSuite.Core.XmlGeoSerializationFormatter.LoadCore(System.IO.Stream stream = {System.IO.MemoryStream}) + 0x5a bytes  





Is there any way to set another encoding when using GEOSERIALIZER? 



Just as information, when I am serializing, I am using this code:


                            XElement zoomLevelSetElement = new XElement(“ZoomLevelSet”);
                            GeoSerializer serializer = new GeoSerializer();
                            zoomLevelSetElement.Value = serializer.Serialize(featureLayer.ZoomLevelSet);



I get absolutelly no errors during serialization!



The full serialization XML is attached (ZoomLevelSet.xml)


 

Can anyone help me on that?



Kind regards,



Pedro








</valueitems>


002_001_ZoomLevelSet.xml (90.7 KB)

Hi Pedro, 
  
 Thanks for your post, we have improved this, would you please get the latest dlls 7.0.93.0(this change is not in 7.0.0.93) with following code: 
  
 GeoSerializer serializer = new GeoSerializer();   
 serializer.Formatter.Encoding = Encoding.GetEncoding(1252);  
  
 7.0.93.0 is still in build will be available in hours. 
  
 Hope it helps 
  
 Summer

Hi Summer,



Thanks for your reply.



I have downloaded the .93 version but could not find the property mentioned:



serializer.Formatter.Encoding = Encoding.GetEncoding(1252); 



I am a bit confusing as you wrote:

" would you please get the latest dlls 7.0.93.0(this change is not in 7.0.0.93)"



So, the change will be available only on .94??



To avoid any confusion I attached the dll I am using(.93) and the “Encoding” property is not there.





Kind regards,

Pedro


MapSuiteCore.zip (1.27 MB)

Hi Pedro, 
  
 Thanks for your further information, " would you please get the latest dlls 7.0.93.0(this change is not in 7.0.0.93)" means that this is change is only in development(7.0.93.0) build rather production build(7.0.0.93) becaues there is a API change, so would you please get the development build 7.0.93.0 or later and try again? 
  
 Thanks 
  
 Summer 


Hi Summer!

Worked like a charm! Thanks!

I have downloaded the Production version by mistake! With the development one it worked correctly.



Thanks!



Pedro 

Hi Pedro, 
  
 Great to hear it is sorted out, if you have any more question, please feel free to let us know. 
  
 Best Regards 
  
 Summer

Hi Summer,



We are using MapSuiteCore.dll 7.0.0.299. Is geoSerializer.Formatter.Encoding still included in that version?



GeoSerializer geoSerializer = new GeoSerializer();
geoSerializer.Formatter.Encoding = Encoding.GetEncoding(1252);



The code above results in the error:



‘ThinkGeo.MapSuite.Core.GeoSerializationFormatter’ does not contain a definition for ‘Encoding’ and no extension method ‘Encoding’ accepting a first argument of type ‘ThinkGeo.MapSuite.Core.GeoSerializationFormatter’ could be found (are you missing a using directive or an assembly reference?)



Kind regards,



Rutger

Hi Rutger, 
  
 Thanks for your post and welcome to Map Suite forums! 
 The dll “7.0.0.299” is a release version and the bug fix didn’t apply in it as it is an Api change, but you can get the development version since 7.0.100.0 to fix the bug. 
  
 If the issue persists, Please feel free to let us know. 
 Thanks, 
 Troy