bool IMerger.TestKey(object source, object overrides, Type type, IMergeContext context) { if (object.Equals(source, overrides)) { return true; } return _cache.GetOrAdd(type, key => new PropertyMergerImpl(key)).TestKey(source, overrides, context); }
public override void Merge(ref object source, object overrides, Type type, IMergeContext context) { var sourceJObj = source as JObject; if (sourceJObj != null && type == typeof(object)) { var overridesDict = overrides as Dictionary<object, object>; if (overridesDict != null) { Merge(sourceJObj, overridesDict, context); // Stop merging since already merged by context merger return; } } base.Merge(ref source, overrides, type, context); }
private void Merge(ref object source, object overrides, Type type, IMergeContext context) { if (source == null) { source = overrides; return; } if (type == typeof(string) || type == typeof(object)) { source = overrides; return; } if (type.IsValueType) { source = overrides; return; } _cache.GetOrAdd(type, key => new PropertyMergerImpl(key)).Merge(ref source, overrides, context); }
private static void Merge(JObject source, Dictionary<object, object> overridesDict, IMergeContext context) { foreach (var or in overridesDict) { var overrideKey = or.Key as string; if (overrideKey != null) { object obj; JToken jToken; if (source.TryGetValue(overrideKey, out jToken)) { obj = jToken; context.Merger.Merge(ref obj, or.Value, typeof(object), context); } else { obj = or.Value; } source[overrideKey] = JToken.FromObject(obj); } } }
public void Merge(IEnumerable source, IEnumerable overrides, IMergeContext context) { foreach (var oi in overrides) { if (oi == null) { continue; } foreach (var si in source) { if (si == null) { continue; } if (context.Merger.TestKey(si, oi, ElementType, context)) { object s = si; context.Merger.Merge(ref s, oi, ElementType, context); } } } }
public override void Merge(ref object source, object overrides, Type type, IMergeContext context) { if (source is IEnumerable && type != typeof(string)) { foreach (var it in type.GetInterfaces()) { if (it.IsGenericType && it.GetGenericTypeDefinition() == typeof(IEnumerable<>)) { if (overrides == null) { return; } if (it.IsAssignableFrom(overrides.GetType())) { new ListMergerImpl(it.GetGenericArguments()[0]).Merge((IEnumerable)source, (IEnumerable)overrides, context); return; } } } } base.Merge(ref source, overrides, type, context); }
public void Merge(IDictionary <TKey, TValue> source, IDictionary <TKey, TValue> overrides, IMergeContext context) { foreach (var oi in overrides) { if (source.TryGetValue(oi.Key, out TValue value)) { object refObj = value; context.Merger.Merge(ref refObj, oi.Value, typeof(TValue), context); value = (TValue)refObj; } else { value = oi.Value; } source[oi.Key] = value; } }
public void Merge(ref object source, object overrides, IMergeContext context) { if (overrides == null) { return; } foreach (var prop in Props) { switch (prop.Option) { case MergeOption.Merge: case MergeOption.MergeNullOrDefault: { var s = prop.Prop.GetValue(source); var o = prop.Prop.GetValue(overrides); if (prop.Option == MergeOption.Merge) { if (o == null) { continue; } if (o.GetType().IsValueType) { var defaultValue = Activator.CreateInstance(o.GetType()); if (object.Equals(defaultValue, o)) { continue; } } } var oldS = s; if (o == null) { s = o; } else if (prop.Handler != null) { prop.Handler.Merge(ref s, o, context); } else { context.Merger.Merge(ref s, o, prop.Prop.PropertyType, context); } if (!object.ReferenceEquals(s, oldS)) { prop.Prop.SetValue(source, s); } continue; } case MergeOption.Replace: case MergeOption.ReplaceNullOrDefault: { var s = prop.Prop.GetValue(source); var o = prop.Prop.GetValue(overrides); if (prop.Option == MergeOption.Replace) { if (o == null) { continue; } if (o.GetType().IsValueType) { var defaultValue = Activator.CreateInstance(o.GetType()); if (object.Equals(defaultValue, o)) { continue; } } } prop.Prop.SetValue(source, o); continue; } default: continue; } } }
void IMerger.Merge(ref object source, object overrides, Type type, IMergeContext context) { Merge(ref source, overrides, type, context); }
public void Merge(ref object source, object overrides, IMergeContext context) { var s = (string)source; var o = (string)overrides; source = s + context["separator"] + o; }
public bool TestKey(object source, object overrides, IMergeContext context) { if (overrides == null) { return false; } return Props.Where(p => p.Option == MergeOption.MergeKey).All(p => { var s = p.Prop.GetValue(source); var o = p.Prop.GetValue(overrides); return object.Equals(s, o); }); }
public virtual bool TestKey(object source, object overrides, Type type, IMergeContext context) { return(_inner.TestKey(source, overrides, type, context)); }
public virtual bool TestKey(object source, object overrides, Type type, IMergeContext context) { return _inner.TestKey(source, overrides, type, context); }
public virtual void Merge(ref object source, object overrides, Type type, IMergeContext context) { _inner.Merge(ref source, overrides, type, context); }
private static void Merge(JObject source, Dictionary <object, object> overridesDict, IMergeContext context) { foreach (var or in overridesDict) { var overrideKey = or.Key as string; if (overrideKey != null) { object obj; JToken jToken; if (source.TryGetValue(overrideKey, out jToken)) { obj = jToken; context.Merger.Merge(ref obj, or.Value, typeof(object), context); } else { obj = or.Value; } source[overrideKey] = JToken.FromObject(obj); } } }
public void Merge(object source, object overrides, IMergeContext context) { Merge((IDictionary <TKey, TValue>)source, (IDictionary <TKey, TValue>)overrides, context); }