// Token: 0x060012AE RID: 4782 RVA: 0x000653A0 File Offset: 0x000635A0 internal override void MergeItem(object content, [Nullable(2)] JsonMergeSettings settings) { JObject jobject = content as JObject; if (jobject == null) { return; } foreach (KeyValuePair <string, JToken> keyValuePair in jobject) { JProperty jproperty = this.Property(keyValuePair.Key, (settings != null) ? settings.PropertyNameComparison : StringComparison.Ordinal); if (jproperty == null) { this.Add(keyValuePair.Key, keyValuePair.Value); } else if (keyValuePair.Value != null) { JContainer jcontainer = jproperty.Value as JContainer; if (jcontainer == null || jcontainer.Type != keyValuePair.Value.Type) { if (!JObject.IsNull(keyValuePair.Value) || (settings != null && settings.MergeNullValueHandling == MergeNullValueHandling.Merge)) { jproperty.Value = keyValuePair.Value; } } else { jcontainer.Merge(keyValuePair.Value, settings); } } } }
internal override void MergeItem(object content, JsonMergeSettings settings) { JObject o = content as JObject; if (o == null) { return; } foreach (KeyValuePair <string, JToken> contentItem in o) { JProperty existingProperty = Property(contentItem.Key); if (existingProperty == null) { Add(contentItem.Key, contentItem.Value); } else if (contentItem.Value != null) { JContainer existingContainer = existingProperty.Value as JContainer; if (existingContainer == null || existingContainer.Type != contentItem.Value.Type) { if (contentItem.Value.Type != JTokenType.Null || settings?.MergeNullValueHandling == MergeNullValueHandling.Merge) { existingProperty.Value = contentItem.Value; } } else { existingContainer.Merge(contentItem.Value, settings); } } } }
internal override void MergeItem(object content, JsonMergeSettings settings) { JObject jObjects = content as JObject; if (jObjects == null) { return; } foreach (KeyValuePair <string, JToken> keyValuePair in jObjects) { JProperty value = this.Property(keyValuePair.Key); if (value != null) { if (keyValuePair.Value == null) { continue; } JContainer jContainers = value.Value as JContainer; if (jContainers == null) { if (keyValuePair.Value.Type == JTokenType.Null && (settings == null || settings.MergeNullValueHandling != MergeNullValueHandling.Merge)) { continue; } value.Value = keyValuePair.Value; } else if (jContainers.Type == keyValuePair.Value.Type) { jContainers.Merge(keyValuePair.Value, settings); } else { value.Value = keyValuePair.Value; } } else { this.Add(keyValuePair.Key, keyValuePair.Value); } } }
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: #if !NET20 HashSet <JToken> items = new HashSet <JToken>(target, EqualityComparer); foreach (JToken item in content) { if (items.Add(item)) { target.Add(item); } } #else IDictionary <JToken, bool> items = new Dictionary <JToken, bool>(EqualityComparer); foreach (JToken t in target) { items[t] = true; } foreach (JToken item in content) { if (!items.ContainsKey(item)) { items[item] = true; target.Add(item); } } #endif break; case MergeArrayHandling.Replace: target.ClearItems(); foreach (JToken item in content) { target.Add(item); } break; case MergeArrayHandling.Merge: int i = 0; foreach (object targetItem in content) { if (i < target.Count) { JToken sourceItem = target[i]; JContainer existingContainer = sourceItem as JContainer; if (existingContainer != null) { existingContainer.Merge(targetItem, settings); } else { if (targetItem != null) { JToken contentValue = CreateFromContent(targetItem); if (contentValue.Type != JTokenType.Null) { target[i] = contentValue; } } } } else { target.Add(targetItem); } i++; } break; default: throw new ArgumentOutOfRangeException(nameof(settings), "Unexpected merge array handling when merging JSON."); } }
// Token: 0x06001298 RID: 4760 RVA: 0x00064E40 File Offset: 0x00063040 internal static void MergeEnumerableContent(JContainer target, IEnumerable content, [Nullable(2)] JsonMergeSettings settings) { switch ((settings != null) ? settings.MergeArrayHandling : MergeArrayHandling.Concat) { case MergeArrayHandling.Concat: using (IEnumerator enumerator = content.GetEnumerator()) { while (enumerator.MoveNext()) { object obj = enumerator.Current; JToken content2 = (JToken)obj; target.Add(content2); } return; } break; case MergeArrayHandling.Union: break; case MergeArrayHandling.Replace: goto IL_CB; case MergeArrayHandling.Merge: goto IL_11A; default: goto IL_1CC; } HashSet <JToken> hashSet = new HashSet <JToken>(target, JToken.EqualityComparer); using (IEnumerator enumerator = content.GetEnumerator()) { while (enumerator.MoveNext()) { object obj2 = enumerator.Current; JToken jtoken = (JToken)obj2; if (hashSet.Add(jtoken)) { target.Add(jtoken); } } return; } IL_CB: if (target == content) { return; } target.ClearItems(); using (IEnumerator enumerator = content.GetEnumerator()) { while (enumerator.MoveNext()) { object obj3 = enumerator.Current; JToken content3 = (JToken)obj3; target.Add(content3); } return; } IL_11A: int num = 0; using (IEnumerator enumerator = content.GetEnumerator()) { while (enumerator.MoveNext()) { object obj4 = enumerator.Current; if (num < target.Count) { JContainer jcontainer = target[num] as JContainer; if (jcontainer != null) { jcontainer.Merge(obj4, settings); } else if (obj4 != null) { JToken jtoken2 = JContainer.CreateFromContent(obj4); if (jtoken2.Type != JTokenType.Null) { target[num] = jtoken2; } } } else { target.Add(obj4); } num++; } return; } IL_1CC: throw new ArgumentOutOfRangeException("settings", "Unexpected merge array handling when merging JSON."); }
internal static void MergeEnumerableContent(JContainer target, IEnumerable content, JsonMergeSettings settings) { IEnumerator enumerator; IDisposable disposable; switch (settings.MergeArrayHandling) { case MergeArrayHandling.Concat: { enumerator = content.GetEnumerator(); try { while (enumerator.MoveNext()) { target.Add((JToken)enumerator.Current); } break; } finally { disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } break; } case MergeArrayHandling.Union: { HashSet <JToken> jTokens = new HashSet <JToken>(target, JToken.EqualityComparer); enumerator = content.GetEnumerator(); try { while (enumerator.MoveNext()) { JToken current = (JToken)enumerator.Current; if (!jTokens.Add(current)) { continue; } target.Add(current); } break; } finally { disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } break; } case MergeArrayHandling.Replace: { target.ClearItems(); enumerator = content.GetEnumerator(); try { while (enumerator.MoveNext()) { target.Add((JToken)enumerator.Current); } break; } finally { disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } break; } case MergeArrayHandling.Merge: { int num = 0; enumerator = content.GetEnumerator(); try { while (enumerator.MoveNext()) { object obj = enumerator.Current; if (num >= target.Count) { target.Add(obj); } else { JContainer item = target[num] as JContainer; if (item != null) { item.Merge(obj, settings); } else if (obj != null) { JToken jTokens1 = JContainer.CreateFromContent(obj); if (jTokens1.Type != JTokenType.Null) { target[num] = jTokens1; } } } num++; } break; } finally { disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } break; } default: { throw new ArgumentOutOfRangeException("settings", "Unexpected merge array handling when merging JSON."); } } }
internal static void MergeEnumerableContent(JContainer target, IEnumerable content, JsonMergeSettings settings) { switch (settings.MergeArrayHandling) { case MergeArrayHandling.Concat: foreach (JToken token in content) { target.Add(token); } break; case MergeArrayHandling.Union: { HashSet <JToken> set = new HashSet <JToken>(target, JToken.EqualityComparer); foreach (JToken token2 in content) { if (set.Add(token2)) { target.Add(token2); } } break; } case MergeArrayHandling.Replace: target.ClearItems(); foreach (JToken token3 in content) { target.Add(token3); } break; case MergeArrayHandling.Merge: { int num = 0; foreach (object obj2 in content) { if (num < target.Count) { JContainer container = target[num] as JContainer; if (container != null) { container.Merge(obj2, settings); } else if (obj2 != null) { JToken token4 = CreateFromContent(obj2); if (token4.Type != JTokenType.Null) { target[num] = token4; } } } else { target.Add(obj2); } num++; } break; } default: throw new ArgumentOutOfRangeException("settings", "Unexpected merge array handling when merging JSON."); } }