< Summary

Information
Line coverage
26%
Covered lines: 12
Uncovered lines: 34
Coverable lines: 46
Total lines: 104
Line coverage: 26%
Branch coverage
20%
Covered branches: 7
Total branches: 34
Branch coverage: 20.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
Write(...)0%220%
Read(...)50%22100%
ReadAsJsonElement(...)50%121266.66%
ReadAsJsonNode(...)0%12120%
Create(...)0%660%
GetSchema(...)100%110%

File(s)

C:\h\w\B31A098C\w\BB5A0A33\e\runtime-utils\Runner\runtime\src\libraries\System.Text.Json\src\System\Text\Json\Serialization\Converters\Node\JsonNodeConverter.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.Diagnostics;
 5using System.Text.Json.Nodes;
 6using System.Text.Json.Schema;
 7
 8namespace System.Text.Json.Serialization.Converters
 9{
 10    /// <summary>
 11    /// Converter for JsonNode-derived types. The {T} value must be Object and not JsonNode
 12    /// since we allow Object-declared members\variables to deserialize as {JsonNode}.
 13    /// </summary>
 14    internal sealed class JsonNodeConverter : JsonConverter<JsonNode?>
 15    {
 27016        internal static JsonNodeConverter Instance { get; } = new JsonNodeConverter();
 17
 18        public override void Write(Utf8JsonWriter writer, JsonNode? value, JsonSerializerOptions options)
 019        {
 020            if (value is null)
 021            {
 022                writer.WriteNullValue();
 023            }
 24            else
 025            {
 026                value.WriteTo(writer, options);
 027            }
 028        }
 29
 30        public override JsonNode? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 63431        {
 63432            return options.AllowDuplicateProperties
 63433                ? ReadAsJsonElement(ref reader, options.GetNodeOptions())
 63434                : ReadAsJsonNode(ref reader, options.GetNodeOptions());
 32635        }
 36
 37        internal static JsonNode? ReadAsJsonElement(ref Utf8JsonReader reader, JsonNodeOptions options)
 63438        {
 63439            switch (reader.TokenType)
 40            {
 41                case JsonTokenType.String:
 42                case JsonTokenType.False:
 43                case JsonTokenType.True:
 44                case JsonTokenType.Number:
 40645                    return JsonValueConverter.ReadNonNullPrimitiveValue(ref reader, options);
 46                case JsonTokenType.StartObject:
 4847                    return JsonObjectConverter.ReadAsJsonElement(ref reader, options);
 48                case JsonTokenType.StartArray:
 18049                    return JsonArrayConverter.ReadAsJsonElement(ref reader, options);
 50                case JsonTokenType.Null:
 051                    return null;
 52                default:
 053                    Debug.Assert(false);
 054                    throw new JsonException();
 55            }
 32656        }
 57
 58        internal static JsonNode? ReadAsJsonNode(ref Utf8JsonReader reader, JsonNodeOptions options)
 059        {
 060            switch (reader.TokenType)
 61            {
 62                case JsonTokenType.String:
 63                case JsonTokenType.False:
 64                case JsonTokenType.True:
 65                case JsonTokenType.Number:
 066                    return JsonValueConverter.ReadNonNullPrimitiveValue(ref reader, options);
 67                case JsonTokenType.StartObject:
 068                    return JsonObjectConverter.ReadAsJsonNode(ref reader, options);
 69                case JsonTokenType.StartArray:
 070                    return JsonArrayConverter.ReadAsJsonNode(ref reader, options);
 71                case JsonTokenType.Null:
 072                    return null;
 73                default:
 074                    Debug.Assert(false);
 075                    throw new JsonException();
 76            }
 077        }
 78
 79        public static JsonNode? Create(JsonElement element, JsonNodeOptions? options)
 080        {
 81            JsonNode? node;
 82
 083            switch (element.ValueKind)
 84            {
 85                case JsonValueKind.Null:
 086                    node = null;
 087                    break;
 88                case JsonValueKind.Object:
 089                    node = new JsonObject(element, options);
 090                    break;
 91                case JsonValueKind.Array:
 092                    node = new JsonArray(element, options);
 093                    break;
 94                default:
 095                    node = new JsonValueOfElement(element, options);
 096                    break;
 97            }
 98
 099            return node;
 0100        }
 101
 0102        internal override JsonSchema? GetSchema(JsonNumberHandling _) => JsonSchema.CreateTrueSchema();
 103    }
 104}