private static void SetImagePropertiesFromJson(DependencyObject o, DependencyPropertyChangedEventArgs args)
        {
            Symbol symbol = o as Symbol;
            string json = GetJson(symbol);
            if (string.IsNullOrEmpty(json))
                return;

            SolidColorBrush selectionColor = new SolidColorBrush(Colors.Cyan);
            FS.PictureFillSymbol pfs = o as FS.PictureFillSymbol;
            if (pfs != null)
            {
                FS.PictureFillSymbol pfsN = Symbol.FromJson(json) as FS.PictureFillSymbol;
                if (pfsN != null)
                {
                    #region Copy Properties
                    pfs.Source = pfsN.Source;
                    //internal properties - for documentation
                    //pfs.Angle = pfsN.Angle;
                    //pfs.XOffset = pfsN.XOffset;
                    //pfs.YOffset = pfsN.YOffset;
                    //pfs.XScale = pfsN.XScale;
                    //pfs.YScale = pfsN.YScale;
                    pfs.BorderBrush = pfsN.BorderBrush;
                    pfs.BorderThickness = pfsN.BorderThickness;
                    pfs.BorderStyle = pfsN.BorderStyle;
                    pfs.Width = pfsN.Width;
                    pfs.Height = pfsN.Height;
                    pfs.Color = pfsN.Color;
                    pfs.Opacity = 0.75;
                    pfs.SelectionColor = selectionColor;
                    #endregion
                }
                return;
            }
            FS.PictureMarkerSymbol pms = o as FS.PictureMarkerSymbol;
            if (pms != null)
            {
                FS.PictureMarkerSymbol pmsN = Symbol.FromJson(json) as FS.PictureMarkerSymbol;
                if (pmsN != null)
                {
                    #region Copy Properties
                    pms.Source = pmsN.Source;
                    pms.Width = pmsN.Width;
                    pms.Height = pmsN.Height;
                    pms.XOffsetFromCenter = pmsN.XOffsetFromCenter;
                    pms.YOffsetFromCenter = pmsN.YOffsetFromCenter;
                    pms.Color = pmsN.Color;
                    pms.Opacity = pmsN.Opacity;
                    pms.Angle = pmsN.Angle;
                    pms.SelectionColor = selectionColor;
                    #endregion

                    Dictionary<string, object> jsonObject = new ESRI.ArcGIS.Client.Utils.JavaScriptSerializer().DeserializeObject(json) as Dictionary<string, object>;    
                    if (jsonObject != null)
                    {
                        if (jsonObject.ContainsKey("imageData"))
                            SetImageData(pms, jsonObject["imageData"] as string);
                        else if (jsonObject.ContainsKey("url"))
                            SetImageUrl(pms, jsonObject["url"] as string);
                    }
                }
                return;
            }
            FS.SimpleFillSymbol sfs = o as FS.SimpleFillSymbol;
            if (sfs != null)
            {
                FS.SimpleFillSymbol sfsN = Symbol.FromJson(json) as FS.SimpleFillSymbol;
                if (sfsN != null)
                {
                    #region Copy Properties
                    sfs.Fill = sfsN.Fill;
                    sfs.Style = sfsN.Style;
                    sfs.Color = sfsN.Color;
                    sfs.BorderBrush = sfsN.BorderBrush;
                    sfs.BorderThickness = sfsN.BorderThickness;
                    sfs.BorderStyle = sfsN.BorderStyle;
                    sfs.SelectionColor = selectionColor;
                    #endregion
                }
                return;
            }
            FS.SimpleLineSymbol sls = o as FS.SimpleLineSymbol;
            if (sls != null)
            {
                FS.SimpleLineSymbol slsN = Symbol.FromJson(json) as FS.SimpleLineSymbol;
                if (slsN != null)
                {
                    #region CopyProperties
                    sls.Style = slsN.Style;
                    sls.Color = slsN.Color;
                    sls.Width = slsN.Width;
                    sls.SelectionColor = selectionColor;
                    #endregion
                }
                return;
            }
            FS.SimpleMarkerSymbol sms = o as FS.SimpleMarkerSymbol;
            if (sms != null)
            {
                FS.SimpleMarkerSymbol smsN = Symbol.FromJson(json) as FS.SimpleMarkerSymbol;
                if (smsN != null)
                {
                    #region Copy properties
                    sms.Style = smsN.Style;
                    sms.Color = smsN.Color;
                    sms.Size = smsN.Size;
                    sms.XOffsetFromCenter = smsN.XOffsetFromCenter;
                    sms.YOffsetFromCenter = smsN.YOffsetFromCenter;
                    sms.Angle = smsN.Angle;
                    sms.OutlineColor = smsN.OutlineColor;
                    sms.OutlineThickness = smsN.OutlineThickness;
                    sms.OutlineStyle = smsN.OutlineStyle;
                    sms.SelectionColor = selectionColor;
                    #endregion
                }
                return;
            }
        }
        private static void SetImagePropertiesFromJson(DependencyObject o, DependencyPropertyChangedEventArgs args)
        {
            Symbol symbol = o as Symbol;
            string json   = GetJson(symbol);

            if (string.IsNullOrEmpty(json))
            {
                return;
            }

            SolidColorBrush selectionColor = new SolidColorBrush(Colors.Cyan);

            FS.PictureFillSymbol pfs = o as FS.PictureFillSymbol;
            if (pfs != null)
            {
                FS.PictureFillSymbol pfsN = Symbol.FromJson(json) as FS.PictureFillSymbol;
                if (pfsN != null)
                {
                    #region Copy Properties
                    pfs.Source = pfsN.Source;
                    //internal properties - for documentation
                    //pfs.Angle = pfsN.Angle;
                    //pfs.XOffset = pfsN.XOffset;
                    //pfs.YOffset = pfsN.YOffset;
                    //pfs.XScale = pfsN.XScale;
                    //pfs.YScale = pfsN.YScale;
                    pfs.BorderBrush     = pfsN.BorderBrush;
                    pfs.BorderThickness = pfsN.BorderThickness;
                    pfs.BorderStyle     = pfsN.BorderStyle;
                    pfs.Width           = pfsN.Width;
                    pfs.Height          = pfsN.Height;
                    pfs.Color           = pfsN.Color;
                    pfs.Opacity         = 0.75;
                    pfs.SelectionColor  = selectionColor;
                    #endregion
                }
                return;
            }
            FS.PictureMarkerSymbol pms = o as FS.PictureMarkerSymbol;
            if (pms != null)
            {
                FS.PictureMarkerSymbol pmsN = Symbol.FromJson(json) as FS.PictureMarkerSymbol;
                if (pmsN != null)
                {
                    #region Copy Properties
                    pms.Source            = pmsN.Source;
                    pms.Width             = pmsN.Width;
                    pms.Height            = pmsN.Height;
                    pms.XOffsetFromCenter = pmsN.XOffsetFromCenter;
                    pms.YOffsetFromCenter = pmsN.YOffsetFromCenter;
                    pms.Color             = pmsN.Color;
                    pms.Opacity           = pmsN.Opacity;
                    pms.Angle             = pmsN.Angle;
                    pms.SelectionColor    = selectionColor;
                    #endregion

                    Dictionary <string, object> jsonObject = new ESRI.ArcGIS.Client.Utils.JavaScriptSerializer().DeserializeObject(json) as Dictionary <string, object>;
                    if (jsonObject != null)
                    {
                        if (jsonObject.ContainsKey("imageData"))
                        {
                            SetImageData(pms, jsonObject["imageData"] as string);
                        }
                        else if (jsonObject.ContainsKey("url"))
                        {
                            SetImageUrl(pms, jsonObject["url"] as string);
                        }
                    }
                }
                return;
            }
            FS.SimpleFillSymbol sfs = o as FS.SimpleFillSymbol;
            if (sfs != null)
            {
                FS.SimpleFillSymbol sfsN = Symbol.FromJson(json) as FS.SimpleFillSymbol;
                if (sfsN != null)
                {
                    #region Copy Properties
                    sfs.Fill            = sfsN.Fill;
                    sfs.Style           = sfsN.Style;
                    sfs.Color           = sfsN.Color;
                    sfs.BorderBrush     = sfsN.BorderBrush;
                    sfs.BorderThickness = sfsN.BorderThickness;
                    sfs.BorderStyle     = sfsN.BorderStyle;
                    sfs.SelectionColor  = selectionColor;
                    #endregion
                }
                return;
            }
            FS.SimpleLineSymbol sls = o as FS.SimpleLineSymbol;
            if (sls != null)
            {
                FS.SimpleLineSymbol slsN = Symbol.FromJson(json) as FS.SimpleLineSymbol;
                if (slsN != null)
                {
                    #region CopyProperties
                    sls.Style          = slsN.Style;
                    sls.Color          = slsN.Color;
                    sls.Width          = slsN.Width;
                    sls.SelectionColor = selectionColor;
                    #endregion
                }
                return;
            }
            FS.SimpleMarkerSymbol sms = o as FS.SimpleMarkerSymbol;
            if (sms != null)
            {
                FS.SimpleMarkerSymbol smsN = Symbol.FromJson(json) as FS.SimpleMarkerSymbol;
                if (smsN != null)
                {
                    #region Copy properties
                    sms.Style             = smsN.Style;
                    sms.Color             = smsN.Color;
                    sms.Size              = smsN.Size;
                    sms.XOffsetFromCenter = smsN.XOffsetFromCenter;
                    sms.YOffsetFromCenter = smsN.YOffsetFromCenter;
                    sms.Angle             = smsN.Angle;
                    sms.OutlineColor      = smsN.OutlineColor;
                    sms.OutlineThickness  = smsN.OutlineThickness;
                    sms.OutlineStyle      = smsN.OutlineStyle;
                    sms.SelectionColor    = selectionColor;
                    #endregion
                }
                return;
            }
        }