internal override void MergeItem(object content, JsonMergeSettings settings) { var c = content as JConstructor; if (c == null) return; if (c.Name != null) Name = c.Name; MergeEnumerableContent(this, c, settings); }
internal abstract void MergeItem(object content, JsonMergeSettings settings);
/// <summary> /// Merge the specified content into this <see cref="JToken"/> using <see cref="JsonMergeSettings"/>. /// </summary> /// <param name="content">The content to be merged.</param> /// <param name="settings">The <see cref="JsonMergeSettings"/> used to merge the content.</param> public void Merge(object content, JsonMergeSettings settings) { MergeItem(content, settings); }
internal static void MergeEnumerableContent(JContainer target, IEnumerable content, JsonMergeSettings settings) { switch (settings.MergeArrayHandling) { case MergeArrayHandling.Concat: foreach (JToken item in content) { target.Add(item); } break; case MergeArrayHandling.Union: var items = new HashSet <JToken>(target, EqualityComparer); foreach (JToken item in content) { if (items.Add(item)) { target.Add(item); } } break; case MergeArrayHandling.Replace: target.ClearItems(); foreach (JToken item in content) { target.Add(item); } break; case MergeArrayHandling.Merge: var i = 0; foreach (var targetItem in content) { if (i < target.Count) { var sourceItem = target[i]; var existingContainer = sourceItem as JContainer; if (existingContainer != null) { existingContainer.Merge(targetItem, settings); } else { if (targetItem != null) { var contentValue = CreateFromContent(targetItem); if (contentValue.Type != JTokenType.Null) { target[i] = contentValue; } } } } else { target.Add(targetItem); } i++; } break; default: throw new ArgumentOutOfRangeException("settings", "Unexpected merge array handling when merging JSON."); } }