コード例 #1
0
ファイル: JsonDeserializer.cs プロジェクト: git-thinh/core
        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);
        }