Isaac.

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

  1. Compression: Use gzip for responses
  2. Pagination: Don't serialize everything
  3. Filtering: Only return needed fields
  4. Caching: Cache serialized responses
  5. 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.