using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Collections.ObjectModel;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using System.Text.Json.Nodes;
public record Obj(JsonNode value);
public static void Test()
Test("""{"value":null}""", () =>
JsonSerializer.Deserialize<JsonNode>("null")
Test("""{"value":null}""", () =>
JsonSerializer.Deserialize<Obj>("""{"value":null}""")
JsonSerializer.Deserialize<List<JsonNode>>("""[1]""")
JsonSerializer.Deserialize<List<JsonNode>>("""["a"]""")
Test("""[[null]]""", () =>
JsonSerializer.Deserialize<List<JsonNode>>("""[[null]]""")
Test("""["a". {}, [], [[null]]]""", () =>
JsonSerializer.Deserialize<List<JsonNode>>("""["a", {}, [], [[null]]]""")
JsonSerializer.Deserialize<List<JsonNode>>("""[null]""")
JsonSerializer.Deserialize<List<JsonNode?>>("""[null]""")
JsonSerializer.Deserialize<IReadOnlyList<JsonNode?>>("""[null]""")
JsonSerializer.Deserialize<JsonNode []>("""[null]""")
JsonSerializer.Deserialize<JsonNode? []>("""[null]""")
JsonSerializer.Deserialize<IEnumerable<JsonNode?>>("""[null]""")
static void Test<T>(string json, Func<T> test)
Console.WriteLine("Testing deserialization of {0} to {1}:", json, typeof(T));
Console.WriteLine(" Result: {0}", JsonSerializer.Serialize(value));
Console.WriteLine(" FAILED with exception:\n {0}", ex);
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("System.Text.Json version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");