Tom, I ran into the same issue and had to manually specify my symbology in my data before encoding. Maybe the API team can explain this limitation or agree to fix the issue, but until then here is what I did.private function addGras():void
{
drawAC = new ArrayCollection();
var i:Number;
var symTypeName:String = "";
var symType:String = "";
var symLType:String = "";
var symFontE:String = "";
var symSize:Number = 1;
var symColor:Number = 0x000000;
var symColor2:Number = 0x000000;
var symWidth:Number = 1;
var symText:String = "";
var symAlpha1:Number = 1;
var symAlpha2:Number = 1;
var geomType:String = "";
var geomSR:Number;
var gname:String = "";
for (i = 0; i < graphicsLayer.numGraphics; i++)
{
var geomArray:Array = [];
symText = "";
var gra:Graphic = graphicsLayer.getChildAt(i) as Graphic;
switch(gra.geometry.type)
{
case Geometry.MAPPOINT:
{
if (gra.symbol is TextSymbol) {
var txtSym:TextSymbol = gra.symbol as TextSymbol;
symTypeName = "TextSymbol";
var txtFormat:TextFormat = txtSym.textFormat;
if(useDefaultFont){
symType = "Arial"
}else{
symType = txtFormat.font
}
symText = txtSym.text;
if (txtFormat.bold)
symFontE += "B"
if (txtFormat.italic)
symFontE += "I"
if (txtFormat.underline)
symFontE += "U"
symSize = Number(txtFormat.size);
symColor = Number(txtFormat.color);
} else {
var ptSym:SimpleMarkerSymbol = gra.symbol as SimpleMarkerSymbol;
symTypeName = "SimpleMarkerSymbol";
symType = ptSym.style;
symColor = ptSym.color;
symSize = ptSym.size;
symAlpha1 = ptSym.alpha;
symColor2 = ptSym.outline.color;
symAlpha2 = ptSym.outline.alpha;
symWidth = ptSym.outline.width;
symLType = ptSym.outline.style;
}
geomType = "MAPPOINT";
var pnt:MapPoint = gra.geometry as MapPoint;
geomSR = gra.geometry.spatialReference.wkid
geomArray.push(pnt);
break;
}
case Geometry.POLYLINE:
{
var lineSym:SimpleLineSymbol = gra.symbol as SimpleLineSymbol;
symTypeName = "SimpleLineSymbol";
symType = lineSym.style;
symWidth = lineSym.width;
symAlpha1 = lineSym.alpha;
symColor = lineSym.color;
geomType = "POLYLINE";
var polyline:Polyline = gra.geometry as Polyline;
for (var i1:int = 0; i1 < polyline.paths.length; i1++)
{
for (var j:int = 0; j < polyline.paths[i1].length; j++)
{
var mp:MapPoint = polyline.getPoint(i1,j) as MapPoint;
geomArray.push(mp);
}
}
geomSR = gra.geometry.spatialReference.wkid
break;
}
case Geometry.POLYGON:
{
var polySym:SimpleFillSymbol = gra.symbol as SimpleFillSymbol;
symTypeName = "SimpleFillSymbol";
symType = polySym.style;
symWidth = polySym.outline.width;
symLType = polySym.outline.style;
symAlpha1 = polySym.alpha;
symAlpha2 = polySym.outline.alpha
symColor = polySym.color;
symColor2 = polySym.outline.color;
geomType = "POLYGON";
var poly:Polygon= gra.geometry as Polygon;
for (var i2:int = 0; i2 < poly.rings.length; i2++)
{
for (var j1:int = 0; j1 < poly.rings[i2].length; j1++)
{
var mp2:MapPoint = poly.getPoint(i2,j1) as MapPoint;
geomArray.push(mp2);
}
}
geomSR = gra.geometry.spatialReference.wkid
break;
}
case Geometry.EXTENT:
{
var rectSym:SimpleFillSymbol = gra.symbol as SimpleFillSymbol;
symTypeName = "SimpleFillSymbol";
symType = rectSym.style;
symWidth = rectSym.outline.width;
symLType = rectSym.outline.style;
symAlpha1 = rectSym.alpha;
symAlpha2 = rectSym.outline.alpha
symColor = rectSym.color;
symColor2 = rectSym.outline.color;
geomType = "EXTENT";
var rect:Extent= gra.geometry as Extent;
var mp3:MapPoint;
mp3 = new MapPoint(rect.xmin, rect.ymin, gra.geometry.spatialReference);
geomArray.push(mp3);
mp3 = new MapPoint(rect.xmax, rect.ymax, gra.geometry.spatialReference);
geomArray.push(mp3);
geomSR = gra.geometry.spatialReference.wkid
break;
}
}
var gObj:Object = {
geomtype: geomType,
geomarray: geomArray,
geomsr: geomSR,
symtypename: symTypeName,
symtype: symType,
symsize: symSize,
symcolor: symColor,
symcolor2: symColor2,
symwidth: symWidth,
symtext: symText,
symalpha1: symAlpha1,
symalpha2: symAlpha2,
cmenu: gra.contextMenu,
symfonte: symFontE,
symltype: symLType,
gname: gra.name
}
drawAC.addItem(gObj);
}
if(!fr) fr = new FileReference();
fr.save(JSON.encode(drawAC.source),"SavedGraphics.txt")
graphicsLayer.clear();
}