internal static ThemeLabel FromJson(JsonObject json)
{
if (json == null) return null;
ThemeLabel themeLabel = new ThemeLabel();
ThemeLabelAlongLine alongLine = new ThemeLabelAlongLine();
if (json["alongLineDirection"] != null)
{
alongLine.AlongLineDirection = (AlongLineDirection)Enum.Parse(typeof(AlongLineDirection), json["alongLineDirection"], true);
}
else
{
//不处理null的情况
}
alongLine.AngleFixed = (bool)json["angleFixed"];
alongLine.IsAlongLine = (bool)json["alongLine"];
alongLine.LabelRepeatInterval = (double)json["labelRepeatInterval"];
alongLine.RepeatedLabelAvoided = (bool)json["repeatedLabelAvoided"];
alongLine.RepeatIntervalFixed = (bool)json["repeatIntervalFixed"];
themeLabel.AlongLine = alongLine;
ThemeLabelBackSetting backSetting = new ThemeLabelBackSetting();
if (json["backStyle"] != null)
{
backSetting.BackStyle = ServerStyle.FromJson((JsonObject)json["backStyle"]);
}
if (json["labelBackShape"] != null)
{
backSetting.LabelBackShape = (LabelBackShape)Enum.Parse(typeof(LabelBackShape), json["labelBackShape"], true);
}
else
{
//不处理null的情况
}
themeLabel.BackSetting = backSetting;
ThemeFlow flow = new ThemeFlow();
flow.FlowEnabled = (bool)json["flowEnabled"];
flow.LeaderLineDisplayed = (bool)json["leaderLineDisplayed"];
if (json["leaderLineStyle"] != null)
{
flow.LeaderLineStyle = ServerStyle.FromJson((JsonObject)json["leaderLineStyle"]);
}
themeLabel.Flow = flow;
List<ThemeLabelItem> items = new List<ThemeLabelItem>();
if (json["items"] != null && json["items"].Count > 0)
{
for (int i = 0; i < json["items"].Count; i++)
{
items.Add(ThemeLabelItem.FromJson(((JsonObject)json["items"][i])));
}
}
themeLabel.Items = items;
themeLabel.LabelExpression = (string)json["labelExpression"];
if (json["labelOverLengthMode"] != null)
{
themeLabel.LabelOverLengthMode = (LabelOverLengthMode)Enum.Parse(typeof(LabelOverLengthMode), json["labelOverLengthMode"], true);
}
else
{
//不处理null的情况
}
//themeLabel.MatrixCells
if (json["matrixCells"] != null)
{
int rowCount = ((JsonArray)json["matrixCells"]).Count;
int columnCount = ((JsonArray)((JsonArray)json["matrixCells"])[0]).Count;
LabelMatrixCell[,] matrixCells = new LabelMatrixCell[columnCount, rowCount];
for (int column = 0; column < ((JsonArray)json["matrixCells"]).Count; column++)
{
JsonArray cells = (JsonArray)((JsonArray)json["matrixCells"])[column];
for (int row = 0; row < cells.Count; row++)
{
if (cells[row].ContainsKey("height") && cells[row].ContainsKey("pathField") && cells[row].ContainsKey("rotation") && cells[row].ContainsKey("sizeFixed") && cells[row].ContainsKey("width"))
{
matrixCells[row, column] = (LabelImageCell.FromJson((JsonObject)cells[row]));
}
else if (cells[row].ContainsKey("style") && cells[row].ContainsKey("symbolIDField"))
{
matrixCells[row, column] = (LabelSymbolCell.FromJson((JsonObject)cells[row]));
}
else if (cells[row].ContainsKey("themeLabel"))
{
matrixCells[row, column] = (LabelThemeCell.FromJson((JsonObject)((JsonObject)cells[row])["themeLabel"]));
}
}
}
themeLabel.MatrixCells = matrixCells;
}
themeLabel.MaxLabelLength = (int)json["maxLabelLength"];
themeLabel.NumericPrecision = (int)json["numericPrecision"];
themeLabel.Offset = ThemeOffset.FromJson(json);
themeLabel.OverlapAvoided = (bool)json["overlapAvoided"];
themeLabel.RangeExpression = (string)json["rangeExpression"];
themeLabel.SmallGeometryLabeled = (bool)json["smallGeometryLabeled"];
themeLabel.Text = ThemeLabelText.FromJson(json);
return themeLabel;
}