private bool TryParseCoordinate(JArray coordinates, out CoordinateInfo result) { if (coordinates != null && coordinates.Count > 1 && coordinates.All(x => x is JValue)) { var vals = coordinates.Cast<JValue>().ToList(); if (vals.All(x => x.Type == JTokenType.Float || x.Type == JTokenType.Integer)) { result = new CoordinateInfo { X = Convert.ToDouble(vals[0].Value), Y = Convert.ToDouble(vals[1].Value), Z = vals.Count > 2 ? Convert.ToDouble(vals[2].Value) : (double?)null, M = vals.Count > 3 ? Convert.ToDouble(vals[3].Value) : (double?)null }; return true; } } result = null; return false; }
private bool TryParseCoordinateArray(JArray coordinates, out CoordinateInfo[] result) { result = null; if (coordinates == null) return false; var valid = coordinates.All(x => x is JArray); if (!valid) return false; var tempResult = new CoordinateInfo[coordinates.Count]; for (var index = 0; index < coordinates.Count; index++) { if (!TryParseCoordinate((JArray)coordinates[index], out tempResult[index])) return false; } result = tempResult; return true; }