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()
var options = new JsonSerializerOptions
UnknownTypeHandling = JsonUnknownTypeHandling.JsonNode,
Test("""{"value":null}""", () =>
JsonSerializer.Deserialize<JsonNode>("null", options)
Test("""{"value":null}""", () =>
JsonSerializer.Deserialize<Obj>("""{"value":null}""", options)
JsonSerializer.Deserialize<List<JsonNode>>("""[1]""", options)
JsonSerializer.Deserialize<List<JsonNode>>("""["a"]""", options)
JsonSerializer.Deserialize<List<object>>("""[null]""", options)
JsonSerializer.Deserialize<List<object>>("""[null]""", options)
JsonSerializer.Deserialize<IReadOnlyList<object>>("""[null]""", options)
JsonSerializer.Deserialize<object []>("""[null]""", options)
JsonSerializer.Deserialize<object? []>("""[null]""", options)
JsonSerializer.Deserialize<IEnumerable<object>>("""[null]""", options)
Test("""[null, [null], 1, {}, "a"]""", () =>
var list = JsonSerializer.Deserialize<IEnumerable<object>>("""[null, [null], 1, {}, "a"]""",
?.Cast<JsonNode?>().ToList();
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.Message);
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: ");