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;
}
}