using System.Collections;
using System.Collections.Generic;
using System.Text.Json.Serialization;
public virtual int? Prop1 { get; set; }
public virtual string? Prop2 { get; set; }
public virtual long? Prop3 { get; set; }
public class Derived: Base
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public override int? Prop1 { get => base.Prop1; set => base.Prop1 = value; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public override string? Prop2 { get => base.Prop2; set => base.Prop2 = value; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public override long? Prop3 { get => base.Prop3; set => base.Prop3 = value; }
public List<Base>? Properties { get; set; }
[JsonPropertyName(nameof(Properties))]
public IEnumerable<object>? SerializedProperties => Properties?.AsEnumerable();
static Model GetModelInternal(bool baseOrDerived)
baseOrDerived ? new Derived() : new Base(),
baseOrDerived ? new Derived { Prop2 = "hello" } : new Base { Prop2 = "hello" },
public static void Test()
var options = new JsonSerializerOptions
Console.WriteLine("Serialized Model with baseOrDerived = false");
Console.WriteLine(JsonSerializer.Serialize(GetModelInternal(false), options));
Console.WriteLine("Serialized Model with baseOrDerived = true");
Console.WriteLine(JsonSerializer.Serialize(GetModelInternal(true), options));
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: ");