< Summary

Information
Line coverage
0%
Covered lines: 0
Uncovered lines: 36
Coverable lines: 36
Total lines: 80
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor()100%110%
Add(System.Object& modreq(...)100%110%
CreateCollection(...)0%220%
OnWriteResume(...)0%10100%

File(s)

C:\h\w\B31A098C\w\BB5A0A33\e\runtime-utils\Runner\runtime\src\libraries\System.Text.Json\src\System\Text\Json\Serialization\Converters\Collection\IEnumerableConverter.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Collections;
 5using System.Collections.Generic;
 6using System.Text.Json.Serialization.Metadata;
 7
 8namespace System.Text.Json.Serialization.Converters
 9{
 10    /// <summary>
 11    /// Converter for <cref>System.Collections.IEnumerable</cref>.
 12    /// </summary>
 13    /// <typeparam name="TCollection"></typeparam>
 14    internal sealed class IEnumerableConverter<TCollection>
 15        : JsonCollectionConverter<TCollection, object?>
 16        where TCollection : IEnumerable
 17    {
 018        private readonly bool _isDeserializable = typeof(TCollection).IsAssignableFrom(typeof(List<object?>));
 19
 20        protected override void Add(in object? value, ref ReadStack state)
 021        {
 022            ((List<object?>)state.Current.ReturnValue!).Add(value);
 023        }
 24
 025        internal override bool SupportsCreateObjectDelegate => false;
 26        protected override void CreateCollection(ref Utf8JsonReader reader, scoped ref ReadStack state, JsonSerializerOp
 027        {
 028            if (!_isDeserializable)
 029            {
 030                ThrowHelper.ThrowNotSupportedException_CannotPopulateCollection(Type, ref reader, ref state);
 31            }
 32
 033            state.Current.ReturnValue = new List<object?>();
 034        }
 35
 36        // Consider overriding ConvertCollection to convert the list to an array since a List is mutable.
 37        // However, converting from the temporary list to an array will be slower.
 38
 39        protected override bool OnWriteResume(
 40            Utf8JsonWriter writer,
 41            TCollection value,
 42            JsonSerializerOptions options,
 43            ref WriteStack state)
 044        {
 45            IEnumerator enumerator;
 046            if (state.Current.CollectionEnumerator == null)
 047            {
 048                enumerator = value.GetEnumerator();
 049                state.Current.CollectionEnumerator = enumerator;
 050                if (!enumerator.MoveNext())
 051                {
 052                    return true;
 53                }
 054            }
 55            else
 056            {
 057                enumerator = state.Current.CollectionEnumerator;
 058            }
 59
 060            JsonConverter<object?> converter = GetElementConverter(ref state);
 61            do
 062            {
 063                if (ShouldFlush(ref state, writer))
 064                {
 065                    return false;
 66                }
 67
 068                object? element = enumerator.Current;
 069                if (!converter.TryWrite(writer, element, options, ref state))
 070                {
 071                    return false;
 72                }
 73
 074                state.Current.EndCollectionElement();
 075            } while (enumerator.MoveNext());
 76
 077            return true;
 078        }
 79    }
 80}