public static void Main()
Console.WriteLine("Case 1: Derived class");
var obj = JsonSerializer.Deserialize("{}", typeof(DerivedTestClass));
Console.WriteLine("obj: " + obj.ToString());
Console.WriteLine(e.Message);
Console.WriteLine("\nCase 2: Base class");
var obj = JsonSerializer.Deserialize("{}", typeof(TestClass));
Console.WriteLine("obj: " + obj.ToString());
Console.WriteLine(e.Message);
public required string StringValue { get; set; }
public required int IntegerValue { get; set; }
private class DerivedTestClass : TestClass
public override string ToString()
return $"StringValue: '{StringValue}', IntegerValue: '{IntegerValue}'";