コード例 #1
0
        /// <summary>
        /// Writes this <see cref="JsonArray"/> to a <see cref="IJsonConsumer"/>.
        /// This is also used internally by <see cref="JsonValue.ToModel(System.Type)"/> and
        /// <see cref="JsonValue.ToModel{T}"/> in order to convert this generic object
        /// model to a JSON string or another .NET object.
        /// </summary>
        /// <param name="consumer">The consumer.</param>
        public override void Write(IJsonConsumer consumer)
        {
            IJsonArrayConsumer arrayConsumer = consumer.Array();

            for (int i = 0; i < mList.Count; i++)
            {
                mList[i].Write(arrayConsumer);
            }
            arrayConsumer.Done();
        }
コード例 #2
0
            public static void ParseArray(Tokenizer tokenizer, IJsonArrayConsumer consumer)
            {
                tokenizer.MoveNext(); // skip '['

                if (tokenizer.CurrentToken.Type == Tokenizer.Token.None)
                {
                    throw new ParserException($"Unexpected end of stream reached while parsing array in line {tokenizer.CurrentToken.LineNo} at position {tokenizer.CurrentToken.Position}.", tokenizer.CurrentToken.LineNo, tokenizer.CurrentToken.Position);
                }

                if (tokenizer.CurrentToken.Type == Tokenizer.Token.SquaredClose)
                {
                    tokenizer.MoveNext(); // skip ']'
                    consumer.Done();
                    return;
                }

                for (; ;)
                {
                    // parse value
                    ParseValue(tokenizer, consumer);

                    if (tokenizer.CurrentToken.Type == Tokenizer.Token.Comma)
                    {
                        tokenizer.MoveNext();
                    }
                    else if (tokenizer.CurrentToken.Type == Tokenizer.Token.SquaredClose)
                    {
                        tokenizer.MoveNext(); // skip ']'
                        consumer.Done();
                        return;
                    }
                    else if (tokenizer.CurrentToken.Type == Tokenizer.Token.None)
                    {
                        throw new ParserException($"Unexpected end of stream reached while parsing array in line {tokenizer.CurrentToken.LineNo} at position {tokenizer.CurrentToken.Position}.", tokenizer.CurrentToken.LineNo, tokenizer.CurrentToken.Position);
                    }
                    else
                    {
                        throw new ParserException($"Unexpected token in line {tokenizer.CurrentToken.LineNo} at position {tokenizer.CurrentToken.Position}. Either ']' or ',' was expected.", tokenizer.CurrentToken.LineNo, tokenizer.CurrentToken.Position);
                    }
                }
            }