/// <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)); }
/// <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)); }