diff --git a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/Serialization/DomTests.cs b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/Serialization/DomTests.cs index bf11f1cbf8b875..c98e0f91d7c628 100644 --- a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/Serialization/DomTests.cs +++ b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/Serialization/DomTests.cs @@ -210,6 +210,26 @@ public static void SerializeToNode_RespectsMaxDepth(int maxDepth) Assert.Throws(() => JsonSerializer.SerializeToNode(value, options)); } + [Theory] + [InlineData(5)] + [InlineData(32)] + [InlineData(70)] // default max depth is 64 + public static void DeserializeToNode_RespectsMaxDepth(int maxDepth) + { + var options = new JsonSerializerOptions { MaxDepth = maxDepth }; + + // Deserializing JSON at exactly the max depth should succeed. + string validJson = string.Concat(Enumerable.Repeat("[", maxDepth)) + + string.Concat(Enumerable.Repeat("]", maxDepth)); + JsonNode? node = JsonSerializer.Deserialize(validJson, options); + Assert.NotNull(node); + + // Deserializing JSON exceeding the max depth by one should throw. + string tooDeepJson = string.Concat(Enumerable.Repeat("[", maxDepth + 1)) + + string.Concat(Enumerable.Repeat("]", maxDepth + 1)); + Assert.Throws(() => JsonSerializer.Deserialize(tooDeepJson, options)); + } + public class RecursiveClass { public RecursiveClass? Next { get; set; }