< Summary

Information
Class: System.Text.Json.Serialization.Converters.ArrayConverter<T1, T2>
Assembly: System.Text.Json
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\ArrayConverter.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 40
Coverable lines: 40
Total lines: 71
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
Add(TElement& modreq(...)100%110%
CreateCollection(...)100%110%
ConvertCollection(...)100%110%
OnWriteResume(...)0%12120%

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\ArrayConverter.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;
 6
 7namespace System.Text.Json.Serialization.Converters
 8{
 9    /// <summary>
 10    /// Converter for <cref>System.Array</cref>.
 11    /// </summary>
 12    internal sealed class ArrayConverter<TCollection, TElement> : IEnumerableDefaultConverter<TElement[], TElement>
 13    {
 014        internal override bool CanHaveMetadata => false;
 15
 16        protected override void Add(in TElement value, ref ReadStack state)
 017        {
 018            ((List<TElement>)state.Current.ReturnValue!).Add(value);
 019        }
 20
 021        internal override bool SupportsCreateObjectDelegate => false;
 22        protected override void CreateCollection(ref Utf8JsonReader reader, scoped ref ReadStack state, JsonSerializerOp
 023        {
 024            state.Current.ReturnValue = new List<TElement>();
 025        }
 26
 027        internal sealed override bool IsConvertibleCollection => true;
 28        protected override void ConvertCollection(ref ReadStack state, JsonSerializerOptions options)
 029        {
 030            List<TElement> list = (List<TElement>)state.Current.ReturnValue!;
 031            state.Current.ReturnValue = list.ToArray();
 032        }
 33
 34        protected override bool OnWriteResume(Utf8JsonWriter writer, TElement[] array, JsonSerializerOptions options, re
 035        {
 036            int index = state.Current.EnumeratorIndex;
 37
 038            JsonConverter<TElement> elementConverter = GetElementConverter(ref state);
 039            if (elementConverter.CanUseDirectReadOrWrite && state.Current.NumberHandling == null)
 040            {
 41                // Fast path that avoids validation and extra indirection.
 042                for (; index < array.Length; index++)
 043                {
 044                    elementConverter.Write(writer, array[index], options);
 045                }
 046            }
 47            else
 048            {
 049                for (; index < array.Length; index++)
 050                {
 051                    TElement element = array[index];
 052                    if (!elementConverter.TryWrite(writer, element, options, ref state))
 053                    {
 054                        state.Current.EnumeratorIndex = index;
 055                        return false;
 56                    }
 57
 058                    state.Current.EndCollectionElement();
 59
 060                    if (ShouldFlush(ref state, writer))
 061                    {
 062                        state.Current.EnumeratorIndex = ++index;
 063                        return false;
 64                    }
 065                }
 066            }
 67
 068            return true;
 069        }
 70    }
 71}