Exemplo n.º 1
0
 /// <summary>
 /// From Json String to MessagePack binary
 /// </summary>
 public static byte[] FromJson(TextReader reader)
 {
     using (var jr = new TinyJsonReader(reader, false))
     {
         var stream = new MsgPackStream(1024);
         FromJsonCore(jr, stream);
         return(stream.Output.ToArray());
     }
 }
Exemplo n.º 2
0
        private static uint FromJsonCore(TinyJsonReader jr, MsgPackStream stream)
        {
            uint count = 0;

            while (jr.Read())
            {
                switch (jr.TokenType)
                {
                case TinyJsonToken.None: break;

                case TinyJsonToken.EndObject: return(count);

                case TinyJsonToken.EndArray: return(count);

                case TinyJsonToken.StartObject:
                {
                    var innerStream = new MsgPackStream(1024);
                    var mapCount    = FromJsonCore(jr, innerStream) / 2;
                    StreamWriter.WriteMapHeader(mapCount, stream);
                    stream.WriteBytes(innerStream.Output);

                    count++;
                    break;
                }

                case TinyJsonToken.StartArray:
                {
                    var innerStream = new MsgPackStream(1024);
                    var arrayCount  = FromJsonCore(jr, innerStream);
                    StreamWriter.WriteArrayHeader(arrayCount, stream);
                    stream.WriteBytes(innerStream.Output);
                    count++;
                    break;
                }

                case TinyJsonToken.Number:
                    var v = jr.ValueType;
                    if (v == ValueType.Double)
                    {
                        StreamWriter.WriteDouble(jr.DoubleValue, stream);
                    }
                    else if (v == ValueType.Long)
                    {
                        StreamWriter.WriteInt64(jr.LongValue, stream);
                    }
                    else if (v == ValueType.ULong)
                    {
                        StreamWriter.WriteUInt64(jr.ULongValue, stream);
                    }
                    else if (v == ValueType.Decimal)
                    {
                        StreamWriter.WriteString(jr.DecimalValue.ToString(CultureInfo.InvariantCulture), stream);
                    }
                    count++;
                    break;

                case TinyJsonToken.String:
                    StreamWriter.WriteString(jr.StringValue, stream);
                    count++;
                    break;

                case TinyJsonToken.True:
                    StreamWriter.WriteBool(true, stream);
                    count++;
                    break;

                case TinyJsonToken.False:
                    StreamWriter.WriteBool(false, stream);
                    count++;
                    break;

                case TinyJsonToken.Null:
                    StreamWriter.WriteNil(stream);
                    count++;
                    break;
                }
            }

            return(count);
        }