/// <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 ParseValue(Tokenizer tokenizer, IJsonConsumer consumer) { if (tokenizer.CurrentToken.Type == Tokenizer.Token.None) { throw new ParserException($"Unexpected end of stream reached in line {tokenizer.CurrentToken.LineNo} at position {tokenizer.CurrentToken.Position}.", tokenizer.CurrentToken.LineNo, tokenizer.CurrentToken.Position); } if (tokenizer.CurrentToken.Type == Tokenizer.Token.CurlyOpen) { ParseObject(tokenizer, consumer.Object()); return; } if (tokenizer.CurrentToken.Type == Tokenizer.Token.SquaredOpen) { ParseArray(tokenizer, consumer.Array()); return; } if (tokenizer.CurrentToken.Type == Tokenizer.Token.String) { consumer.String(tokenizer.CurrentToken.StringValue); } else if (tokenizer.CurrentToken.Type == Tokenizer.Token.Boolean) { consumer.Boolean(tokenizer.CurrentToken.BooleanValue); } else if (tokenizer.CurrentToken.Type == Tokenizer.Token.NumberInteger) { consumer.Number(tokenizer.CurrentToken.IntegerValue); } else if (tokenizer.CurrentToken.Type == Tokenizer.Token.NumberUnsignedInteger) { consumer.Number(tokenizer.CurrentToken.UnsignedIntegerValue); } else if (tokenizer.CurrentToken.Type == Tokenizer.Token.NumberFloat) { consumer.Number(tokenizer.CurrentToken.FloatValue); } else if (tokenizer.CurrentToken.Type == Tokenizer.Token.Null) { consumer.Null(); } else { throw new ParserException($"Expected value in line {tokenizer.CurrentToken.LineNo} at position {tokenizer.CurrentToken.Position}, but found '{tokenizer.CurrentToken}'.", tokenizer.CurrentToken.LineNo, tokenizer.CurrentToken.Position); } tokenizer.MoveNext(); // skip value literal }
/// <summary> /// Writes data of the .NET object to the given <see cref="IJsonConsumer"/> /// in order to convert it to a JSON string or to any other representation of /// JSON data. This implementation expects <paramref name="value"/> to implement /// <see cref="IEnumerable"/> and creates a JSON array from it. The <paramref name="value"/> /// may be null, though. /// </summary> /// <param name="value">The .NET object to write. It may be null or an instance of /// <see cref="IEnumerable"/>.</param> /// <param name="writer">The JSON consumer which will be used to write the array to.</param> public override void Write(object value, IJsonConsumer writer) { if (value == null) { writer.Null(); return; } var arrayConsumer = writer.Array(); foreach (object item in (IEnumerable)value) { ElementConverter.Write(item, arrayConsumer); } arrayConsumer.Done(); }