< Summary

Line coverage
23%
Covered lines: 11
Uncovered lines: 35
Coverable lines: 46
Total lines: 105
Line coverage: 23.9%
Branch coverage
17%
Covered branches: 6
Total branches: 34
Branch coverage: 17.6%
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(...)41.66%121255.55%
ReadAsJsonNode(...)0%12120%
Create(...)0%660%
GetSchema(...)100%110%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/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    {
 8716        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)
 1231        {
 1232            return options.AllowDuplicateProperties
 1233                ? ReadAsJsonElement(ref reader, options.GetNodeOptions())
 1234                : ReadAsJsonNode(ref reader, options.GetNodeOptions());
 435        }
 36
 37        internal static JsonNode? ReadAsJsonElement(ref Utf8JsonReader reader, JsonNodeOptions options)
 1238        {
 1239            switch (reader.TokenType)
 40            {
 41                case JsonTokenType.String:
 42                case JsonTokenType.False:
 43                case JsonTokenType.True:
 44                case JsonTokenType.Number:
 445                    return JsonValueConverter.ReadNonNullPrimitiveValue(ref reader, options);
 46                case JsonTokenType.StartObject:
 047                    return JsonObjectConverter.ReadAsJsonElement(ref reader, options);
 48                case JsonTokenType.StartArray:
 849                    return JsonArrayConverter.ReadAsJsonElement(ref reader, options);
 50                case JsonTokenType.Null:
 051                    return null;
 52                default:
 053                    Debug.Assert(false);
 054                    throw new JsonException();
 55            }
 456        }
 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}
 105