private bool TryDeserialize(byte[] data, out object result)
        {
            if (_deserializeFormat.HasValue)
            {
                bool shouldLogError = _isNewFormat ?? false;
                switch (_deserializeFormat.Value)
                {
                case SerializationFormat.Json:
                    return(JsonDeserializer.TryDeserialize(
                               data,
                               _messageType,
                               shouldLogError ? _log : null,
                               out result));

                case SerializationFormat.MessagePack:
                    return(MessagePackDeserializer.TryDeserialize(
                               data,
                               _messageType,
                               shouldLogError ? _log : null,
                               out result));

                case SerializationFormat.Protobuf:
                    return(ProtobufDeserializer.TryDeserialize(
                               data,
                               _messageType,
                               shouldLogError ? _log : null,
                               out result));

                default:
                    throw new NotSupportedException($"Serialization format {_deserializeFormat.Value} is not supported");
                }
            }
            bool success = JsonDeserializer.TryDeserialize(
                data,
                _messageType,
                null,
                out result);

            if (success)
            {
                _deserializeFormat = SerializationFormat.Json;
                return(true);
            }
            success = MessagePackDeserializer.TryDeserialize(
                data,
                _messageType,
                null,
                out result);
            if (success)
            {
                _deserializeFormat = SerializationFormat.MessagePack;
                return(true);
            }
            success = ProtobufDeserializer.TryDeserialize(
                data,
                _messageType,
                null,
                out result);
            if (!success)
            {
                _log.WriteWarning(nameof(TryDeserialize), null, $"Couldn't deserialize message with length {data.Length}");
            }
            return(success);
        }