using System.Collections.Generic;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using System.Text.Json.Nodes;
[JsonPolymorphic(TypeDiscriminatorPropertyName = "__type")]
[JsonDerivedType(typeof(Person), typeDiscriminator: "P")]
[JsonDerivedType(typeof(Adult), typeDiscriminator: "A")]
public string Name { get; set; }
[JsonPolymorphic(TypeDiscriminatorPropertyName = "__type")]
[JsonDerivedType(typeof(Adult), typeDiscriminator: "A")]
public class Adult : Person;
public static void Test()
var people = new Person[] { new Person { Name = "AbcPerson" }, new Adult { Name = "foo" } };
var json = JsonSerializer.Serialize(people);
var people2 = JsonSerializer.Deserialize<Person []>(json);
Assert.That(json.Contains("\"__type\""));
Assert.That(!json.Contains("\"$type\""));
Assert.That(people.Select(p => p.GetType()).SequenceEqual(people2!.Select(p => p.GetType())));
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: ");