diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonArrayConverter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonArrayConverter.cs index 17b955cfe4fb25..bd44ed16726226 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonArrayConverter.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonArrayConverter.cs @@ -20,6 +20,8 @@ public override void Write(Utf8JsonWriter writer, JsonArray value, JsonSerialize { case JsonTokenType.StartArray: return ReadList(ref reader, options.GetNodeOptions()); + case JsonTokenType.Null: + return null; default: Debug.Assert(false); throw ThrowHelper.GetInvalidOperationException_ExpectedArray(reader.TokenType); diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonNodeConverter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonNodeConverter.cs index 5dd032cc743e03..4076784e1d8c28 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonNodeConverter.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonNodeConverter.cs @@ -61,6 +61,8 @@ public override void Write(Utf8JsonWriter writer, JsonNode? value, JsonSerialize return ObjectConverter.Read(ref reader, typeToConvert, options); case JsonTokenType.StartArray: return ArrayConverter.Read(ref reader, typeToConvert, options); + case JsonTokenType.Null: + return null; default: Debug.Assert(false); throw new JsonException(); diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonObjectConverter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonObjectConverter.cs index fa4dce96fddd5f..860009ce74b5ee 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonObjectConverter.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Node/JsonObjectConverter.cs @@ -45,6 +45,8 @@ public override void Write(Utf8JsonWriter writer, JsonObject value, JsonSerializ { case JsonTokenType.StartObject: return ReadObject(ref reader, options.GetNodeOptions()); + case JsonTokenType.Null: + return null; default: Debug.Assert(false); throw ThrowHelper.GetInvalidOperationException_ExpectedObject(reader.TokenType); diff --git a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonNodeTests.cs b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonNodeTests.cs index cabcf4091f7675..a90d59a49ccd10 100644 --- a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonNodeTests.cs +++ b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonNodeTests.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Collections; +using System.Collections.Generic; using Xunit; namespace System.Text.Json.Nodes.Tests @@ -39,7 +41,20 @@ public static void JsonTypes_Deserialize() Assert.IsAssignableFrom(JsonNode.Parse("\"str\"")); Assert.IsAssignableFrom(JsonNode.Parse(ToUtf8("\"str\""))); Assert.IsType(JsonSerializer.Deserialize("\"str\"")); + + JsonType_Deserializes_Null(); + JsonType_Deserializes_Null(); + JsonType_Deserializes_Null(); + } + + private static void JsonType_Deserializes_Null() where TNode : JsonNode + { + Assert.Null(JsonSerializer.Deserialize("null")); + Assert.Collection(JsonSerializer.Deserialize("[null]"), Assert.Null); + Assert.Collection(JsonSerializer.Deserialize>("{ \"Value\": null }"), kv => Assert.Null(kv.Value)); + Assert.Null(JsonSerializer.Deserialize>("{ \"Value\": null }").Value); } + private record ObjectWithNodeProperty(TNode Value) where TNode : JsonNode; [Fact] public static void AsMethods_Throws()