using System.Text.Json.Serialization;
using System.Collections.Generic;
public static void Main()
var options = new JsonSerializerOptions()
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
Console.WriteLine("PropertyNamingPolicy: " + options.PropertyNamingPolicy);
options.Converters.Add(new EmailadressenConverter());
var dmc = JsonSerializer.Deserialize<DummyMailClass>(json, options);
dmc.Should().NotBeNull();
dmc!.EmailZakelijk.Should().NotBeNull();
dmc.EmailZakelijk!.Email.Value.Should().Be("foo@bar.com");
Console.WriteLine(JsonSerializer.Serialize(dmc, options));
public class EmailadressenConverter : JsonConverter<Emails>
public override bool CanConvert(Type typeToConvert)
return base.CanConvert(typeToConvert);
public override Emails? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
Console.WriteLine("Read");
var optionalEmails = new List<string>();
var currentPropertyName = "";
if (reader.TokenType == JsonTokenType.StartObject)
else if (reader.TokenType == JsonTokenType.EndObject)
else if (reader.TokenType == JsonTokenType.PropertyName)
currentPropertyName = reader.GetString()!;
if (string.Equals(currentPropertyName, "email", StringComparison.CurrentCultureIgnoreCase))
Emailadres emailadres = JsonSerializer.Deserialize<Emailadres>(ref reader, options);
ctorEmail = emailadres.Value;
else if (reader.TokenType == JsonTokenType.String)
ctorEmail = reader.GetString()!;
if (string.IsNullOrEmpty(ctorEmail))
return new Emails(ctorEmail);
public override void Write(Utf8JsonWriter writer, Emails value, JsonSerializerOptions options)
writer.WriteStartObject();
writer.WriteString(nameof(Emails.Email), value.Email.Value);
public Emails(string primairEmailadres)
Email = new Emailadres(primairEmailadres);
public Emailadres Email { get; set; }
public class DummyMailClass
public Emails? EmailZakelijk { get; set; }
public partial record Emailadres
public Emailadres(string value)
public string Value { get; private set; }