public class SerializableFeature { public SerializableFeature(Graphic g) { Geometry = g.Geometry; Attributes = g.Attributes; Color = ((g.Symbol as SimpleMarkerSymbol).Color as SolidColorBrush).Color; } public Geometry Geometry { get; set; } public Color Color { get; set; } public IDictionary<string,object> Attributes { get; set; } }
[DataContract] public class SerializableFeature { public Graphic ToGraphic() { Graphic g = new Graphic() { Geometry = Geometry }; foreach(string key in Attributes.Keys) g.Attributes.Add(key, Attributes[key]); g.Symbol = new SimpleMarkerSymbol() { Color = new SolidColorBrush(Color) }; return g; } }
public class SerializableSymbol { //Properties public Color ColorFill { get; set; } public Color BorderBrush { get; set; } public Double SizeThickness { get; set; } public Int32 Style { get; set; } public SymbolType Type { get; set; } public enum SymbolType { SimpleMarkerSymbol = 0, SimpleLineSymbol = 1, SimpleFillSymbol = 2 } //Constructors public SerializableSymbol() { } public SerializableSymbol(Symbol symbol) { if (symbol is SimpleMarkerSymbol) { SimpleMarkerSymbol simpleMarkerSymbol = ((SimpleMarkerSymbol)symbol); ColorFill = ((SolidColorBrush)simpleMarkerSymbol.Color).Color; SizeThickness = simpleMarkerSymbol.Size; Style = (Int32)simpleMarkerSymbol.Style; Type = SymbolType.SimpleMarkerSymbol; } else if (symbol is SimpleLineSymbol) { SimpleLineSymbol simpleLineSymbol = ((SimpleLineSymbol)symbol); ColorFill = ((SolidColorBrush)simpleLineSymbol.Color).Color; SizeThickness = simpleLineSymbol.Width; Style = (Int32)simpleLineSymbol.Style; Type = SymbolType.SimpleLineSymbol; } else if (symbol is SimpleFillSymbol) { SimpleFillSymbol simpleFillSymbol = ((SimpleFillSymbol)symbol); ColorFill = ((SolidColorBrush)simpleFillSymbol.Fill).Color; BorderBrush = ((SolidColorBrush)simpleFillSymbol.Fill).Color; SizeThickness = simpleFillSymbol.BorderThickness; Type = SymbolType.SimpleFillSymbol; } } //Operators public static explicit operator SerializableSymbol(Symbol symbol) { SerializableSymbol serializableSymbol = new SerializableSymbol(symbol); return serializableSymbol; } public static implicit operator Symbol(SerializableSymbol serializableSymbol) { if (serializableSymbol.Type == SymbolType.SimpleMarkerSymbol) { SimpleMarkerSymbol symbol = new SimpleMarkerSymbol(); symbol.Color = new SolidColorBrush(serializableSymbol.ColorFill); symbol.Size = serializableSymbol.SizeThickness; symbol.Style = (SimpleMarkerSymbol.SimpleMarkerStyle)serializableSymbol.Style; return symbol; } else if (serializableSymbol.Type == SymbolType.SimpleLineSymbol) { SimpleLineSymbol symbol = new SimpleLineSymbol(); symbol.Color = new SolidColorBrush(serializableSymbol.ColorFill); symbol.Width = serializableSymbol.SizeThickness; symbol.Style = (SimpleLineSymbol.LineStyle)serializableSymbol.Style; return symbol; } else if (serializableSymbol.Type == SymbolType.SimpleFillSymbol) { SimpleFillSymbol symbol = new SimpleFillSymbol(); symbol.Fill = new SolidColorBrush(serializableSymbol.ColorFill); symbol.BorderBrush = new SolidColorBrush(serializableSymbol.BorderBrush); symbol.BorderThickness = serializableSymbol.SizeThickness; return symbol; } else return null; } } public class SerializableGraphic { //Properties public ESRI.ArcGIS.Client.Geometry.Geometry Geometry { get; set; } public SerializableSymbol Symbol { get; set; } public IDictionary<String, object> Attributes { get; set; } //Constructor public SerializableGraphic() { } public SerializableGraphic(Graphic graphic) { Geometry = graphic.Geometry; Attributes = graphic.Attributes; Symbol = new SerializableSymbol(graphic.Symbol); } //Operators public static explicit operator SerializableGraphic(Graphic graphic) { SerializableGraphic serializableGraphic = new SerializableGraphic(graphic); return serializableGraphic; } public static implicit operator Graphic(SerializableGraphic serializableGraphic) { Graphic graphic = new Graphic { Geometry = serializableGraphic.Geometry, Symbol = serializableGraphic.Symbol, }; foreach (String key in serializableGraphic.Attributes.Keys) graphic.Attributes.Add(key, serializableGraphic.Attributes[key]); return graphic; } }