Esempio n. 1
0
        /// <summary>
        /// Serialize Property change tracking contract.
        /// </summary>
        /// <param name="obj">Object to serialize.</param>
        /// <param name="additionalProperties">Additional properties to serialize.</param>
        /// <param name="appendRootObject">Append root object name.</param>
        /// <returns></returns>
        public string Serialize(IPropertyChangeTracking obj, Dictionary <string, object> additionalProperties, bool appendRootObject = true)
        {
            /*
             * Two behaviors appendRootObject covers.
             * 1. appendRootObject = false
             *
             *  {
             *      "Property1": "Value",
             *      "Property2": "Value",
             *      etc..
             *  }
             *
             *  2. appendRootObject = true
             *  It appends object name. For an instance, object Message with two properties
             *
             *  {
             *      "message": {
             *          "Property1": "Value",
             *          "Property2": "Value",
             *          etc...
             *      }
             *  }
             */

            JObject rootObject = new JObject();

            if (appendRootObject)
            {
                rootObject.Add(
                    obj.GetType().Name,
                    this.BuildObjectFromIPropertyChangeTracking(obj));
            }
            else
            {
                rootObject = this.BuildObjectFromIPropertyChangeTracking(obj);
            }

            // Additional properties aren't part of initial object, for example "Comment" in SendMail.
            if (null != additionalProperties && additionalProperties.Count > 0)
            {
                foreach (KeyValuePair <string, object> additionalProperty in additionalProperties)
                {
                    // Outlook api is case sensitive with parameters so
                    // caps first letter. Other casing is ok from generated
                    // model. Graph doesn't care about casing.
                    rootObject.Add(
                        this.CapsFirstLetter(additionalProperty.Key),
                        JToken.FromObject(additionalProperty.Value));
                }
            }

            return(JsonConvert.SerializeObject(rootObject));
        }
Esempio n. 2
0
        /// <summary>
        /// Serialize property change tracking to string.
        /// </summary>
        /// <param name="changeTracker">Change tracker.</param>
        /// <param name="additionalProperties">Additional properties.</param>
        /// <param name="appendRootObject">Append root object.</param>
        /// <returns></returns>
        internal string Convert(IPropertyChangeTracking changeTracker, Dictionary <string, object> additionalProperties, bool appendRootObject = true)
        {
            /*
             * Two behaviors appendRootObject covers.
             * 1. appendRootObject = false
             *
             *  {
             *      "Property1": "Value",
             *      "Property2": "Value",
             *      etc..
             *  }
             *
             *  2. appendRootObject = true
             *  It appends object name. For an instance, object Message with two properties
             *
             *  {
             *      "message": {
             *          "Property1": "Value",
             *          "Property2": "Value",
             *          etc...
             *      }
             *  }
             */

            JObject rootObject = new JObject();

            if (appendRootObject)
            {
                rootObject.Add(
                    changeTracker.GetType().Name,
                    this.BuildObjectFromIPropertyChangeTracking(changeTracker));
            }
            else
            {
                rootObject = this.BuildObjectFromIPropertyChangeTracking(changeTracker);
            }

            // Additional properties aren't part of initial object, for example "Comment" in SendMail.
            if (null != additionalProperties && additionalProperties.Count > 0)
            {
                foreach (KeyValuePair <string, object> additionalProperty in additionalProperties)
                {
                    rootObject.Add(
                        additionalProperty.Key,
                        JToken.FromObject(additionalProperty.Value));
                }
            }

            return(JsonConvert.SerializeObject(rootObject));
        }