示例#1
0
 protected override void InternalWrite(long value, IJsonConsumer writer)
 {
     if (value >= 0)
     {
         writer.Number((ulong)value);
     }
     else
     {
         writer.Number(value);
     }
 }
示例#2
0
            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
            }
示例#3
0
 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);
     }
 }
示例#4
0
 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);
     }
 }
示例#5
0
 protected override void InternalWrite(uint value, IJsonConsumer writer)
 {
     writer.Number((ulong)value);
 }