private static ICrmSubscriptionMessage Create(string messageBody, BrokeredMessage message)
        {
            Dictionary <string, string> jsonDictionary = JsonConvert.DeserializeObject <Dictionary <string, string> >(messageBody);

            if (!jsonDictionary.ContainsKey("MessageName"))
            {
                ADXTrace.Instance.TraceWarning(TraceCategory.Application, string.Format("Unexpected message format. MessageId: {0} ", message.MessageId));
                return(null);
            }

            switch (jsonDictionary["MessageName"])
            {
            case "MetadataChange":
                NotificationUpdateManager.Instance.MetadataDirty = true;
                return(MetadataMessage.DeserializeMessage(messageBody, message));

            case "Create":
            case "Update":
            case "Delete":
                return(EntityRecordMessage.DeserializeMessage(messageBody, message));

            case "AssociateEntities":
            case "DisassociateEntities":
                return(AssociateDisassociateMessage.DeserializeMessage(messageBody, message));

            default:
                ADXTrace.Instance.TraceWarning(TraceCategory.Application, string.Format("Unexpected message type: {0} ", jsonDictionary["MessageName"]));
                return(null);
            }
        }
        /// <summary>
        /// Deserialize the BrokeredMessage message body into a MetadataMessage
        /// </summary>
        /// <param name="message">BrokeredMessage message body</param>
        /// <param name="brokeredMessage">BrokeredMessage message</param>
        /// <returns>ICrmSubscriptionMessage</returns>
        internal static ICrmSubscriptionMessage DeserializeMessage(string message, BrokeredMessage brokeredMessage)
        {
            MetadataMessage metadataMessage = (MetadataMessage)CrmSubscriptionMessage.DeserializeMessage(message, typeof(MetadataMessage));

            if (metadataMessage != null && metadataMessage.ValidMessage)
            {
                metadataMessage.AppendProperties(brokeredMessage);
                return(metadataMessage);
            }

            return(null);
        }