public static object ToArray(this JArray array) { if (array.AllElementsAreOfSameType()) { var type = array[0].Type; switch (type) { case JTokenType.Boolean: return(array.Select(e => e.Value <bool>()).ToArray()); case JTokenType.Float: return(array.Select(e => e.Value <float>()).ToArray()); case JTokenType.Integer: return(array.Select(e => e.Value <int>()).ToArray()); case JTokenType.String: return(array.Select(e => e.Value <string>()).ToArray()); //case JTokenType.Array: // var firstElement = prop.Values<JToken>().FirstOrDefault(); // if (firstElement == null) // throw new Exception("Empty arrays not supported"); // var mapped = prop.Values<JToken>().Select(GetPropertyValue).ToArray(); // switch (firstElement.Type) // { // case JTokenType.Boolean: // return (object)mapped.Cast<bool>(); // case JTokenType.Float: // return mapped.Cast<float>(); // case JTokenType.Integer: // return mapped.Cast<int>(); // case JTokenType.String: // return mapped.Cast<string>(); // default: // throw new Exception("Parameter type not supported"); // } default: throw new Exception("Parameter type not supported"); } } else { return(array.ToObject <object[]>().Select(ProcessArrayEntry).ToArray()); } }