diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonArray.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonArray.cs index b4ca86f070d6..c43ee004e5ef 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonArray.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonArray.cs @@ -164,6 +164,7 @@ public override void WriteTo(Utf8JsonWriter writer, JsonSerializerOptions? optio } else { + CreateNodes(); Debug.Assert(_list != null); options ??= JsonSerializerOptions.s_defaultOptions; @@ -198,7 +199,9 @@ private void CreateNodes() foreach (JsonElement element in jElement.EnumerateArray()) { - list.Add(JsonNodeConverter.Create(element, Options)); + JsonNode? node = JsonNodeConverter.Create(element, Options); + node?.AssignParent(this); + list.Add(node); } // Clear since no longer needed. diff --git a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonArrayTests.cs b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonArrayTests.cs index 607d841fd0e4..b451ff0bc224 100644 --- a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonArrayTests.cs +++ b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonArrayTests.cs @@ -42,19 +42,20 @@ public static void WriteTo_Validation() Assert.Throws(() => new JsonArray().WriteTo(null)); } - [Fact] - public static void WriteTo() + [Theory] + [InlineData("[]")] + [InlineData("[42]")] + [InlineData("[42,43]")] + public static void WriteTo(string json) { - const string Json = "[42]"; - - JsonArray jArray = JsonNode.Parse(Json).AsArray(); + JsonArray jArray = JsonNode.Parse(json).AsArray(); var stream = new MemoryStream(); var writer = new Utf8JsonWriter(stream); jArray.WriteTo(writer); writer.Flush(); - string json = Encoding.UTF8.GetString(stream.ToArray()); - Assert.Equal(Json, json); + string result = Encoding.UTF8.GetString(stream.ToArray()); + Assert.Equal(json, result); } [Fact] diff --git a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/ParentPathRootTests.cs b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/ParentPathRootTests.cs index eae1aa36987a..d9c1a80fa953 100644 --- a/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/ParentPathRootTests.cs +++ b/src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/ParentPathRootTests.cs @@ -16,20 +16,32 @@ public static void GetPathAndRoot() Assert.Equal("$", node.GetPath()); Assert.Same(node, node.Root); + node = JsonValue.Parse(node.ToJsonString()); + Assert.Equal("$", node.GetPath()); + node = new JsonObject(); Assert.Equal("$", node.GetPath()); Assert.Same(node, node.Root); + node = JsonValue.Parse(node.ToJsonString()); + Assert.Equal("$", node.GetPath()); + node = new JsonArray(); Assert.Equal("$", node.GetPath()); Assert.Same(node, node.Root); + node = JsonValue.Parse(node.ToJsonString()); + Assert.Equal("$", node.GetPath()); + node = new JsonObject { ["Child"] = 1 }; Assert.Equal("$.Child", node["Child"].GetPath()); + node = JsonValue.Parse(node.ToJsonString()); + Assert.Equal("$.Child", node["Child"].GetPath()); + node = new JsonObject { ["Child"] = new JsonArray { 1, 2, 3 } @@ -37,6 +49,9 @@ public static void GetPathAndRoot() Assert.Equal("$.Child[1]", node["Child"][1].GetPath()); Assert.Same(node, node["Child"][1].Root); + node = JsonValue.Parse(node.ToJsonString()); + Assert.Equal("$.Child[1]", node["Child"][1].GetPath()); + node = new JsonObject { ["Child"] = new JsonArray { 1, 2, 3 } @@ -44,6 +59,9 @@ public static void GetPathAndRoot() Assert.Equal("$.Child[2]", node["Child"][2].GetPath()); Assert.Same(node, node["Child"][2].Root); + node = JsonValue.Parse(node.ToJsonString()); + Assert.Equal("$.Child[2]", node["Child"][2].GetPath()); + node = new JsonArray { new JsonObject @@ -53,6 +71,9 @@ public static void GetPathAndRoot() }; Assert.Equal("$[0].Child", node[0]["Child"].GetPath()); Assert.Same(node, node[0]["Child"].Root); + + node = JsonValue.Parse(node.ToJsonString()); + Assert.Equal("$[0].Child", node[0]["Child"].GetPath()); } [Fact]