public static ServerGeometry FromJson(JsonObject json)
{
if (json == null)
{
return null;
}
ServerGeometryType type;
bool isSuccess = Enum.TryParse<ServerGeometryType>((string)json["type"], true, out type);
ServerGeometry geometry;
if (type == ServerGeometryType.LINEM)
{
geometry = new ServerRoute();
((ServerRoute)geometry).Length = (double)json["length"];
((ServerRoute)geometry).MaxM = (double)json["maxM"];
((ServerRoute)geometry).MinM = (double)json["minM"];
}
else
{
geometry = new ServerGeometry();
}
if (isSuccess)
{
geometry.Type = type;
}
else
{
return geometry;
}
geometry.ID = (int)json["id"];
geometry.Style = ServerStyle.FromJson((JsonObject)json["style"]);
JsonArray parts = (JsonArray)json["parts"];
if (parts != null && parts.Count > 0)
{
geometry.Parts = new List<int>();
for (int i = 0; i < parts.Count; i++)
{
geometry.Parts.Add((int)parts[i]);
}
}
JsonArray point2Ds = (JsonArray)json["points"];
if (point2Ds != null && point2Ds.Count > 0)
{
geometry.Points = new Point2DCollection();
for (int i = 0; i < point2Ds.Count; i++)
{
Point2D point = JsonHelper.ToPoint2D((JsonObject)point2Ds[i]);
if (type == ServerGeometryType.LINEM)
{
if (point != Point2D.Empty && ((JsonObject)point2Ds[i]).ContainsKey("measure"))
{
point.Tag = (double)(((JsonObject)point2Ds[i])["measure"]);
}
}
geometry.Points.Add(point);
}
}
return geometry;
}