JObject obj = JObject.Parse(strConfig); string strRenderer = (obj["drawingInfo"]["renderer"]).ToString(); _resultRenderer = Renderer.FromJson(strRenderer); _textRenderer = (obj["drawingInfo"]["labelingInfo"]).ToString(); TextSymbol textSymbol = (TextSymbol)TextSymbol.FromJson(_textRenderer);
"[\r\n {\r\n \"labelPlacement\": \"esriServerPointLabelPlacementCenterCenter\",\r\n \"labelExpression\": \"[NOTIFICATIONTYPE]\",\r\n \"useCodedValues\": true,\r\n \"symbol\": {\r\n \"type\": \"esriTS\",\r\n \"color\": [\r\n 255,\r\n 255,\r\n 255,\r\n 255\r\n ],\r\n \"backgroundColor\": null,\r\n \"borderLineColor\": null,\r\n \"verticalAlignment\": \"bottom\",\r\n \"horizontalAlignment\": \"center\",\r\n \"rightToLeft\": false,\r\n \"angle\": 0,\r\n \"xoffset\": 0,\r\n \"yoffset\": 0,\r\n \"font\": {\r\n \"family\": \"Arial\",\r\n \"size\": 6,\r\n \"style\": \"normal\",\r\n \"weight\": \"normal\",\r\n \"decoration\": \"none\"\r\n }\r\n },\r\n \"minScale\": 0,\r\n \"maxScale\": 0\r\n }\r\n]";
_textRenderer = (obj["drawingInfo"]["labelingInfo"]["symbol"]).ToString();
"labellingInfo" contains not only the symbol but additionaly, "labelPlacement", "labelExpression",...
To get the symbol, you could try:_textRenderer = (obj["drawingInfo"]["labelingInfo"]["symbol"]).ToString();
Not tested though.
JObject obj2 = JObject.Parse(array[0].ToString()); string sym = obj2["symbol"].ToString();
_textRenderer = (obj["drawingInfo"]["labelingInfo"]).ToString();
JArray array = JArray.Parse(_textRenderer);
JObject obj2 = JObject.Parse(array[0].ToString());
string tsym = array[0].ToString();
Graphic grtext;
foreach (Graphic graphic in featureSet.Features)
{
Dictionary<string,string> aliases = featureSet.FieldAliases;
graphic.Symbol = _resultRenderer.GetSymbol(graphic);
FrameworkElement maptip = getMapTip(graphic, aliases);
graphic.MapTip = maptip;
//text renderer
grtext = new Graphic();
grtext.Geometry = graphic.Geometry;
grtext.Symbol = TexTSymbolBuilder.BuildSymbolFromJson(tsym, graphic);
public static class TexTSymbolBuilder
{
public static TextSymbol BuildSymbolFromJson(string json,Graphic gr)
{
JObject obj2 = JObject.Parse(json);
string tsym = obj2["symbol"].ToString();
string lblExpression = obj2["labelExpression"].ToString().Replace("[", "").Replace("]", "");
string labelPlacement = obj2["labelPlacement"].ToString();
TextSymbol sym = new TextSymbol();
JObject objSym =( JObject)obj2["symbol"];
JObject Font = (JObject)objSym["font"];
sym.FontFamily = new FontFamily(Font["family"].ToString());
sym.FontSize = double.Parse(Font["size"].ToString());
sym.Foreground = ColorFromJson(objSym["color"].ToString());
Size labelSize = GetLabelWidth(gr.Attributes[lblExpression].ToString(),sym.FontSize);
switch (labelPlacement)
{
case "esriServerPointLabelPlacementCenterCenter":
sym.Text =gr.Attributes[lblExpression].ToString();
sym.OffsetX = labelSize.Width/2;//((gr.Attributes[lblExpression].ToString().Length * sym.FontSize) / 4);
sym.OffsetY = labelSize.Height/2;//(sym.FontSize / 2);
break;
}
return sym;
}
private static Size GetLabelWidth(string value,double fontsize)
{
Size sz = new Size();
TextBlock blk = new TextBlock();
blk.FontSize = fontsize;
blk.Text = value;
sz.Width = blk.ActualWidth;
sz.Height = blk.ActualHeight;
return sz;
}
private static Brush ColorFromJson(string p)
{
string clipped = p.Replace("[", "").Replace("]", "");
string[] vals = clipped.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
Color clr = Color.FromArgb(byte.Parse(vals[3]),byte.Parse(vals[0]),byte.Parse(vals[1]),byte.Parse(vals[2]));
Brush br = new SolidColorBrush(clr);
return br;
}
}
var textSymbol = new TextSymbol();
textSymbol.FontFamily = new FontFamily("Arial");
textSymbol.FontSize = 25;
textSymbol.Foreground = new SolidColorBrush(Colors.Red);
textSymbol.Text = "test";
var testJson = textSymbol.ToJson();
var testSym = Symbol.FromJson(testJson); //returns null
Just wanted to mention that this appears to be a bug in the latest version of the api:var textSymbol = new TextSymbol(); textSymbol.FontFamily = new FontFamily("Arial"); textSymbol.FontSize = 25; textSymbol.Foreground = new SolidColorBrush(Colors.Red); textSymbol.Text = "test"; var testJson = textSymbol.ToJson(); var testSym = Symbol.FromJson(testJson); //returns null