System.Text.Json ohne Reflection

System.Text.Json ohne Reflection

- Matt

JsonSerializer.Serialize arbeitet standardmäßig über Reflection. Das kostet beim ersten Aufruf Zeit und funktioniert unter Native AOT gar nicht.

[JsonSerializable(typeof(Kunde))]
[JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)]
internal partial class AppJsonContext : JsonSerializerContext;

var json = JsonSerializer.Serialize(kunde, AppJsonContext.Default.Kunde);

Der Generator schreibt den Serialisierungscode beim Übersetzen. Man sieht ihn im Projektmappen-Explorer unter den Analysatoren, was beim Nachvollziehen hilft.

Der Haken: Jeder Typ muss angemeldet werden. Vergisst man einen, fällt das erst zur Laufzeit auf.