/// <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(); }
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); } } }