internal override object BaseDeserialize(TextReader r, string path) { if (JsonParserUtil.PeekIsNull(r, true, path)) { return(null); } var result = new List <TElement>(); var parens = JsonParserUtil.ReadStartArray(r); var c = JsonParserUtil.PeekNextChar(r, true); while (c != ']') { result.Add(_elementSerializer.Deserialize(r, path)); c = JsonParserUtil.PeekNextChar(r, true); if (c != ',' && c != ']') { throw new JsonDeserializationException(string.Format("Expected ']' at '{0}'", path)); } else if (c == ',') { JsonParserUtil.ReadNextChar(r, true); } } JsonParserUtil.ReadEndArray(r, parens); return(typeof(TEnumerable).IsArray ? result.ToArray() : Activator.CreateInstance(typeof(TEnumerable), result)); }