private CloudQueueMessage FromMessage(MessageEnvelope message)
        {
            var oldMessage = new BackwardCompatibilityMessageEnvelope
            {
                Message       = message.GetMessageAsString(),
                MessageId     = message.MessageId,
                CorrelationId = message.CorrelationId,
                MessageType   = message.MessageType,
                SentTime      = message.SentTime
            };
            var content = _backwardCompatibility ? JsonConverter.ToJson(oldMessage) : JsonConverter.ToJson(message);

            var envelope = new CloudQueueMessage(content);

            return(envelope);
        }
        private MessageEnvelope ToMessage(CloudQueueMessage envelope)
        {
            if (envelope == null)
            {
                return(null);
            }

            MessageEnvelope message = null;
            BackwardCompatibilityMessageEnvelope oldMessage = null;

            try
            {
                message    = JsonConverter.FromJson <MessageEnvelope>(envelope.AsString);
                oldMessage = JsonConverter.FromJson <BackwardCompatibilityMessageEnvelope>(envelope.AsString);
            }
            catch
            {
                // Handle broken messages gracefully
                _logger.Warn(null, "Cannot deserialize message: " + envelope.AsString);
            }

            // If message is broken or null
            if (message == null)
            {
                message = new MessageEnvelope
                {
                    Message = envelope.AsBytes
                };
            }

            message.SentTime  = envelope.InsertionTime?.UtcDateTime ?? DateTime.UtcNow;
            message.MessageId = envelope.Id;
            message.Reference = envelope;

            if (oldMessage != null)
            {
                if (message.Message == null)
                {
                    message.SetMessageAsString(oldMessage.Message);
                }
                message.CorrelationId = message.CorrelationId ?? oldMessage.CorrelationId;
                message.MessageType   = message.MessageType ?? oldMessage.MessageType;
            }

            return(message);
        }