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