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) { switch (settings.MergeArrayHandling) { case MergeArrayHandling.Concat: IEnumerator enumerator1 = content.GetEnumerator(); try { while (enumerator1.MoveNext()) { JToken current = (JToken)enumerator1.Current; target.Add((object)current); } break; } finally { if (enumerator1 is IDisposable disposable) { disposable.Dispose(); } } case MergeArrayHandling.Union: HashSet <JToken> jtokenSet = new HashSet <JToken>((IEnumerable <JToken>)target, (IEqualityComparer <JToken>)JToken.EqualityComparer); IEnumerator enumerator2 = content.GetEnumerator(); try { while (enumerator2.MoveNext()) { JToken current = (JToken)enumerator2.Current; if (jtokenSet.Add(current)) { target.Add((object)current); } } break; } finally { if (enumerator2 is IDisposable disposable) { disposable.Dispose(); } } case MergeArrayHandling.Replace: target.ClearItems(); IEnumerator enumerator3 = content.GetEnumerator(); try { while (enumerator3.MoveNext()) { JToken current = (JToken)enumerator3.Current; target.Add((object)current); } break; } finally { if (enumerator3 is IDisposable disposable) { disposable.Dispose(); } } case MergeArrayHandling.Merge: int num = 0; IEnumerator enumerator4 = content.GetEnumerator(); try { while (enumerator4.MoveNext()) { object current = enumerator4.Current; if (num < target.Count) { if (target[(object)num] is JContainer jcontainer) { jcontainer.Merge(current, settings); } else if (current != null) { JToken fromContent = JContainer.CreateFromContent(current); if (fromContent.Type != JTokenType.Null) { target[(object)num] = fromContent; } } } else { target.Add(current); } ++num; } break; } finally { if (enumerator4 is IDisposable disposable) { disposable.Dispose(); } } default: throw new ArgumentOutOfRangeException(nameof(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."); } }