protected override void InternalWrite(long value, IJsonConsumer writer) { if (value >= 0) { writer.Number((ulong)value); } else { writer.Number(value); } }
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 }
protected override void InternalWrite(float value, IJsonConsumer writer) { if (float.IsNaN(value)) { writer.String(DoubleConverter.NAN); } else if (float.IsPositiveInfinity(value)) { writer.String(DoubleConverter.POS_INFINITY); } else if (float.IsNegativeInfinity(value)) { writer.String(DoubleConverter.NEG_INFINITY); } else { writer.Number((double)value); } }
protected override void InternalWrite(double value, IJsonConsumer writer) { if (double.IsNaN(value)) { writer.String(NAN); } else if (double.IsPositiveInfinity(value)) { writer.String(POS_INFINITY); } else if (double.IsNegativeInfinity(value)) { writer.String(NEG_INFINITY); } else { writer.Number(value); } }
protected override void InternalWrite(uint value, IJsonConsumer writer) { writer.Number((ulong)value); }