Skip to content

ADR 0001 — Newtonsoft.Json plutôt que System.Text.Json

Date : initial Statut : Accepté

Contexte

ASP.NET Core 3+ utilise System.Text.Json par défaut. Horizon fait beaucoup de sérialisation d'entités EF avec relations bidirectionnelles (Booking ↔ BookingPassenger ↔ Passenger ↔ Customer ↔ Booking…). Sérialiser ces graphes directement provoque des cycles de références.

Côté front, le code Vue (et autres) attend du JSON camelCase standard et tolérant.

Décision

Utiliser Newtonsoft.Json 13 sur l'ensemble du pipeline ASP.NET :

csharp
services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});

Branché à la fois sur les Razor Pages et sur les controllers API.

Conséquences

  • ReferenceLoopHandling.Ignore casse silencieusement les cycles, ce qui évite des stack overflows à la sérialisation.
  • ✅ Désérialisation [FromBody] insensible à la casse par défaut, ce qui simplifie l'interop avec les SPA Vue.
  • ❌ On porte une dépendance supplémentaire (Microsoft.AspNetCore.Mvc.NewtonsoftJson + Newtonsoft.Json).
  • [JsonIgnore] doit être pris du namespace Newtonsoft.Json, pas System.Text.Json.Serialization (piège classique).
  • ❌ Les performances sont légèrement inférieures à System.Text.Json ; non critique pour Horizon.

Contributors

No contributors

Changelog

No recent changes