using System.Text.Json.Serialization;
using System.Collections.Generic;
public static void Main()
var card = new CardPayment
CustomField1 = "asdasdasdas"
var credit = new CreditPayment
CustomField222 = "12312312312"
List<PaymentBase> lll = new List<PaymentBase>();
var json = JsonSerializer.Serialize<List<PaymentBase>>(lll);
Console.WriteLine("************");
var deserialized = JsonSerializer.Deserialize<List<PaymentBase>>(json);
foreach (var payment in deserialized)
Console.WriteLine(payment.Type);
Console.WriteLine("---------");
var ser = JsonSerializer.Serialize<PaymentBase>(payment);
[JsonPolymorphic(TypeDiscriminatorPropertyName = "Type")]
[JsonDerivedType(typeof(CardPayment), typeDiscriminator: "card")]
[JsonDerivedType(typeof(CreditPayment), typeDiscriminator: "credit")]
public string Type { get; set; } = string.Empty;
public class CardPayment : PaymentBase
public string CustomField1 { get; set; } = string.Empty;
public class CreditPayment : PaymentBase
public string CustomField222 { get; set; } = string.Empty;