private static JToken ReadTypeEncoded(this IBinaryInputStream stream)
        {
            switch (stream.ReadByte())
            {
            case 1:
                return(stream.ReadBooleanEncoded());

            case 2:
                return(stream.ReadArrayEncoded());

            case 3:
                return(stream.ReadIntEncoded());

            case 4:
                return(stream.ReadJsonEncoded());

            case 5:
                return(stream.ReadStringEncoded());

            case 6:
                return(stream.ReadByte());

            case 7:
                return(stream.ReadLongEncoded());

            case 8:
                return(stream.ReadFloatEncoded());

            case 9:
                return(stream.ReadDoubleEncoded());
            }
            return(null);
        }
        public static JObject ReadJsonEncoded(this IBinaryInputStream stream)
        {
            int size = stream.ReadInt();

            if (size < 0)
            {
                return(null);
            }

            JObject keyValues = new JObject();

            for (int i = 0; i < size; i++)
            {
                keyValues.Add(stream.ReadStringEncoded(), stream.ReadTypeEncoded());
            }
            return(keyValues);
        }