private static string ResolverValue(ValueStrategies valueStrategy, string value, string otherValue) { var response = value; if (valueStrategy.HasFlag(ValueStrategies.Force)) { response = otherValue; } else if (valueStrategy.HasFlag(ValueStrategies.ForceOnEmpty)) { response = ((string)response).IsNullOrEmpty() ? otherValue : value; } else if (valueStrategy.HasFlag(ValueStrategies.Sum)) { response = Convert.ToString( Convert.ToDouble( (response.IsNotNullOrEmpty() ? response : "0"), System.Globalization.CultureInfo.InvariantCulture) + Convert.ToDouble( (otherValue.IsNotNullOrEmpty() ? otherValue : "0"), System.Globalization.CultureInfo.InvariantCulture), System.Globalization.CultureInfo.InvariantCulture); } else if (valueStrategy.HasFlag(ValueStrategies.Merge)) { response = String.Concat(value, otherValue); } return(response); }
/// <summary> /// /// </summary> /// <param name="valueStrategy"></param> /// <param name="value"></param> /// <param name="otherValue"></param> /// <returns></returns> private static JToken ResolverValue(ValueStrategies valueStrategy, JToken value, JToken otherValue) { var response = value; if (valueStrategy.HasFlag(ValueStrategies.Force)) { response = otherValue; } else if (valueStrategy.HasFlag(ValueStrategies.ForceOnEmpty)) { response = ((string)response).IsNullOrEmpty() ? otherValue : value; } else if (valueStrategy.HasFlag(ValueStrategies.Sum)) { response = Convert.ToString( Convert.ToDouble( (response.IsNotNullOrEmpty() ? response : "0"), System.Globalization.CultureInfo.InvariantCulture) + Convert.ToDouble( (otherValue.IsNotNullOrEmpty() ? otherValue : "0"), System.Globalization.CultureInfo.InvariantCulture), System.Globalization.CultureInfo.InvariantCulture); } else if (valueStrategy.HasFlag(ValueStrategies.Merge)) { if (response.Type == JTokenType.Array) { if (otherValue.Type == JTokenType.Array) { ((JArray)otherValue).Children().ForEachElement(child => ((JArray)response).Add(child)); } else if (otherValue.HasValues) { ((JArray)response).Add(otherValue); } } else { response = String.Concat(value, otherValue); } } return(response); }
/// <summary> /// /// </summary> /// <param name="jObject"></param> /// <param name="property"></param> /// <param name="valueStrategy"></param> /// <param name="defaultValue"></param> public static void AddUpdate(this JObject jObject, JProperty property, ValueStrategies valueStrategy, JProperty defaultValue) { if (jObject.SelectToken(property.Name) != null) { if (!valueStrategy.HasFlag(ValueStrategies.PreserveOriginal)) { var value = jObject.SelectToken(property.Name).Parent.As <JProperty>(); value.Value = JsonExtensions.ResolverValue(valueStrategy, property, value).Value; } } else { jObject.Add(JsonExtensions.ResolverValue(valueStrategy, property, defaultValue)); } }
/// <summary> /// Adds/Updates a <see cref="JProperty"/> contained in /// the parameter <paramref name="jObject"/>. /// </summary> /// <param name="jObject"> /// A <see cref="JObject"/> instance to add/update. /// </param> /// <param name="name"> /// The name of the <see cref="JProperty"/> to add/update /// to parameter <paramref name="jObject"/>. /// </param> /// <param name="value"> /// The value of the <see cref="JProperty"/> to add/update /// to parameter <paramref name="jObject"/>. /// </param> /// <param name="valueStrategy"> /// The <see cref="ValueStrategies"/> to apply when adding/updating /// a <see cref="JProperty"/> on parameter <paramref name="jObject"/>. /// </param> /// <param name="defaultValue"> /// A default value to be used in conjunction with the given <see cref="ValueStrategies"/> /// when adding/updating parameter <paramref name="jObject"/>. /// </param> public static void AddUpdate(this JObject jObject, string name, string value, ValueStrategies valueStrategy, string defaultValue) { if (jObject.SelectToken(name) != null) { if (!valueStrategy.HasFlag(ValueStrategies.PreserveOriginal)) { var innerValue = (string)jObject.SelectToken(name).Parent.As <JProperty>().Value; jObject.SelectToken(name) .Parent .As <JProperty>() .Value = JsonExtensions .ResolverValue( valueStrategy, value, (valueStrategy == ValueStrategies.Force ? value : innerValue)); } } else { jObject.Add( name, JsonExtensions .ResolverValue( valueStrategy, value, defaultValue)); } }