Compile-Time JSON Serialization with `[JsonSerializable]`
1Concept
`JsonSerializerContext` generates type metadata and property accessors at compile time, eliminating all reflection during JSON serialization and cutting cold-start startup time by up to 80%.
2Architecture Diagram
[JsonSerializable(typeof(UserProfile))]
internal partial class AppJsonSerializerContext : JsonSerializerContext { }
│
▼
Emits Fast Type Metadata Descriptors (Zero Reflection at Runtime!)3Code Example
C# 13 & .NET 9
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
public record AccountPayload(int AccountId, string Owner, decimal Balance);
// Source Generated JSON Context
[JsonSerializable(typeof(AccountPayload))]
[JsonSourceGenerationOptions(WriteIndented = false)]
public partial class AppJsonContext : JsonSerializerContext { }
public class SourceGenJsonDemo
{
public static void Main()
{
var account = new AccountPayload(8001, "Alex", 25_000m);
// Uses compile-time generated serializer context
string json = JsonSerializer.Serialize(account, AppJsonContext.Default.AccountPayload);
Console.WriteLine($"Fast Serialized JSON: {json}");
}
}4Expected Output
Fast Serialized JSON: {"AccountId":8001,"Owner":"Alex","Balance":25000}5Key Takeaways
- ✓Mandatory for Native AOT ASP.NET Core microservices.
- ✓Bypasses reflection metadata generation on application startup.
- ✓Catches missing serialization properties at compile time.