private object DeserializeList(Type listType) { _reader.SkipWhiteSpaces(); if (_reader.Peek() != JsonTokens.StartArrayCharacter) { _reader.AssertAndConsumeNull(); return(null); } _reader.AssertAndConsume(JsonTokens.StartArrayCharacter); var itemType = ListHelper.GetListItemType(listType); bool isReadonly; var container = ListHelper.CreateContainer(listType, itemType, out isReadonly); _reader.SkipWhiteSpaces(); if (_reader.Peek() == JsonTokens.EndArrayCharacter) { _reader.Read(); return(container); } while (true) { container.Add(DeserializeValue(itemType)); _reader.SkipWhiteSpaces(); if (_reader.AssertNextIsDelimiterOrSeparator(JsonTokens.EndArrayCharacter)) { break; } } if (listType.IsArray) { return(ListHelper.ToArray((List <object>)container, itemType)); } if (isReadonly) { return(listType.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, new Type[] { container.GetType() }, null).Invoke(new object[] { container })); } return(container); }