Пример #1
0
        // 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);
                    }
                }
            }
        }
Пример #2
0
        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);
                    }
                }
            }
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
        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.");
            }
        }
Пример #5
0
        // 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.");
        }
Пример #6
0
        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.");
            }
            }
        }
Пример #7
0
        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.");
            }
        }