Optimizing Serialization
Improve performance by optimizing serialization.
By EMEPublished: February 20, 2025
serializationjsonperformancedeserialization
A Simple Analogy
Optimizing serialization is like packing a suitcase efficiently. Remove unnecessary items and arrange for quick access.
Why Optimize?
- Performance: Faster JSON parsing
- Bandwidth: Smaller payloads
- Memory: Less CPU/memory usage
- Scalability: Handle more requests
- UX: Faster response times
System.Text.Json
// Configure serialization options
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = false, // No pretty-print in production
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};
// Serialize
string json = JsonSerializer.Serialize(product, options);
// Deserialize
var product = JsonSerializer.Deserialize<Product>(json, options);
Attribute Configuration
public class Product
{
[JsonPropertyName("prod_id")]
public int Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public string InternalCode { get; set; }
[JsonConverter(typeof(JsonStringEnumConverter))]
public Status Status { get; set; }
}
Streaming
// For large responses
public async Task<IResult> GetLargeDataset()
{
var stream = new PipeWriter();
await JsonSerializer.SerializeAsync(stream, data);
return Results.Stream(stream.AsStream(), "application/json");
}
Performance Tips
// Use source generators (C# 11+)
[JsonSourceGenerationOptions(DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
[JsonSerializable(typeof(Product))]
partial class SourceGenerationContext : JsonSerializerContext { }
// Use pre-serialized strings
private static readonly JsonDocument EmptyArray = JsonDocument.Parse("[]");
Best Practices
- Compression: Use gzip for responses
- Pagination: Don't serialize everything
- Filtering: Only return needed fields
- Caching: Cache serialized responses
- Profiling: Measure serialization time
Related Concepts
- Message compression
- Protobuf
- MessagePack
- Response caching
Summary
Optimize serialization with appropriate configuration, streaming for large data, and source generators for performance.