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.Ignorecasse 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 namespaceNewtonsoft.Json, pasSystem.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

