void DeserializeTo <TMode>(byte *bytes, int length, IDataWriter dataWriter, MessagePackFormatterOptions options) where TMode : struct
        {
            var deserializer = new MessagePackDeserializer <TMode>(this, bytes, length, MaxDepth, options);

            if (typeof(TMode) == typeof(MessagePackDeserializeModes.ReferenceMode))
            {
                deserializer.InitReferences();
            }

            switch (deserializer.GetToken())
            {
            case MessagePackToken.Map:
                if (dataWriter is IDataWriter <string> objectWriter)
                {
                    deserializer.InternalReadObject(objectWriter);
                }
                else
                {
                    ((IAsDataWriter)dataWriter.As <string>()).InvokeTIn(new MessagePackDeserializer <TMode> .InternalWriteMapInvoker(deserializer, dataWriter));
                }
                break;

            case MessagePackToken.Array:
                deserializer.InternalReadArray(dataWriter.As <int>());
                break;

            default:
                dataWriter.Content = XConvert.Cast(deserializer.DirectRead(), dataWriter.ContentType);
                break;
            }
        }
        object Deserialize <TMode>(byte *bytes, int length, Type type, MessagePackFormatterOptions options) where TMode : struct
        {
            var deserializer = new MessagePackDeserializer <TMode>(this, bytes, length, MaxDepth, options);

            if (typeof(TMode) == typeof(MessagePackDeserializeModes.ReferenceMode))
            {
                deserializer.InitReferences();
            }

            return(ValueInterface.GetInterface(type).Read(deserializer));
        }
        static T DeserializeObject <T, TMode>(byte *bytes, int length, MessagePackFormatterOptions options) where TMode : struct
        {
            var deserializer = new MessagePackDeserializer <TMode>(bytes, length, DefaultMaxDepth, options);

            if (typeof(TMode) == typeof(MessagePackDeserializeModes.ReferenceMode))
            {
                deserializer.InitReferences();
            }

            return(ValueInterface <T> .ReadValue(deserializer));
        }