public static JObject getDiffFromLastChange(JToken jactual, JToken jold) { JObject jobject = new JObject(); if (((JObject)jactual).Properties().Count <JProperty>() <= 0) { return((JObject)null); } foreach (JProperty property in ((JObject)jactual).Properties()) { string snakeCase = MPBase.ToSnakeCase(property.Name); if (property.Value.GetType() == typeof(JObject)) { if (jold != null) { JObject diffFromLastChange = MPBase.getDiffFromLastChange(property.Value, jold[(object)property.Name]); if (diffFromLastChange != null && diffFromLastChange.Properties().Count <JProperty>() > 0) { jobject.Add(snakeCase, (JToken)diffFromLastChange); } } else { jobject.Add(snakeCase, property.Value); } } else if (property.Value.GetType() == typeof(JArray)) { jobject.Add(snakeCase, property.Value); } else if (property.Value.GetType() == typeof(JValue)) { if (jold != null) { if (jold[(object)property.Name] != null) { if ((string)property.Value != (string)jold[(object)property.Name]) { jobject.Add(snakeCase, property.Value); } } else { jobject.Add(snakeCase, property.Value); } } else { jobject.Add(snakeCase, property.Value); } } } return(jobject); }
public static JObject GeneratePayload <T>(HttpMethod httpMethod, T resource) where T : MPBase { if (httpMethod.ToString() == "PUT") { return(MPBase.getDiffFromLastChange((JToken)MPCoreUtils.GetJsonFromResource <T>(resource), (JToken)resource.GetLastKnownJson())); } if (httpMethod.ToString() == "POST") { return(MPCoreUtils.GetJsonFromResource <T>(resource)); } return((JObject)null); }