Select to view content in your preferred language

Preserving type of object when using JSON util

649
2
10-10-2010 03:39 PM
RaymolRappai
Emerging Contributor
Hi,
I wanted to store the graphic drawn using DrawTool in json format into an SQL Server. I am using com.esri.ags.utils.JSON util for encoding and decoding. I find that upon encoding the graphic object, the type of the geometry & symbol is not preserved. Thus not able to decode back correctly. Registering geometry and symbol classes using registerClassAlias also doesn't help. I am using the ArcGIS API for Flex 2.1.

-raymol
Tags (2)
0 Kudos
2 Replies
RobertScheitlin__GISP
MVP Emeritus
Raymol,

    I don't have the answer for why the encoding does not work but I can tell you it has been this way in the API for several releases now. I did come up with some thing that works for me. I don't write the graphic to sql. I write the info to a text file on the client machine. Anyway you can look at my code and see how I handle the graphics encoding.

http://www.arcgis.com/home/item.html?id=91a0014160fc4a9caadc2c7fd7089c1b
0 Kudos
RaymolRappai
Emerging Contributor
Thanks Robert,

Serializing to ByteArray helps. Need to have registerClassAlias for geometry and symbol classes.


  var bWriteArray:ByteArray= new ByteArray();
  bWriteArray.writeObject(bookmark);
  bWriteArray.position=0;
  var bytesStr:String;
  if(bWriteArray!=null){
   var base64Enc:Base64Encoder =new Base64Encoder();
   base64Enc.encodeBytes( bWriteArray,0,
    bWriteArray.length );
   bytesStr =base64Enc.toString();
  }
 
//Store bytesStr in database

  var base64Dec:Base64Decoder = new Base64Decoder()
  base64Dec.decode(bytesStr);
  var result:ByteArray=dec.toByteArray();
  result.position=0;         
  bookmark:Object =  result.readObject();
 
   [RemoteClass(alias="gvwidgets.Bookmark.Bookmark")]
   public class Bookmark
   {
    registerClassAlias("com.esri.ags.symbols.Symbol", Symbol);
    registerClassAlias("com.esri.ags.symbols.SimpleMarkerSymbol", SimpleMarkerSymbol);
    registerClassAlias("com.esri.ags.symbols.SimpleLineSymbol", SimpleLineSymbol);
    registerClassAlias("com.esri.ags.symbols.SimpleFillSymbol", SimpleFillSymbol);
    registerClassAlias("com.esri.ags.Graphic", Graphic);
    registerClassAlias("com.esri.ags.SpatialReference", SpatialReference);
    registerClassAlias("com.esri.ags.geometry.MapPoint", MapPoint);
    registerClassAlias("com.esri.ags.geometry.Multipoint", Multipoint);
    registerClassAlias("com.esri.ags.geometry.Polygon", Polygon);
    registerClassAlias("com.esri.ags.geometry.Polyline", Polyline);
    registerClassAlias("com.esri.ags.geometry.Extent", Extent);
    public var bookmarkName:String;
    public var bookmarkType:Boolean;
    public var isBookmarkGraphics:Boolean;   
    public var graphicArray:Array = new Array();
    public var graphicSymbolArray:Array = new Array();
   }

-raymol
0 Kudos