Introduction : Pourquoi chaque développeur C# doit savoir sérialiser des objets en JSON
\n\nAvez-vous déjà pensé combien de fois par jour votre code transforme des objets C# complexes en chaînes JSON compactes ? Travail avec des API web, sauvegarde de configurations, transmission de données entre microservices — partout nous rencontrons la sérialisation. La question "How do I turn a C# object into a JSON string in .NET?" est l'une des plus populaires sur Stack Overflow, et ce n'est pas un hasard. De la manière dont vous le faites dépendent la vitesse de votre application et sa réactivité.
\n\nDans cet article, nous ne montrerons pas seulement comment convertir un objet en chaîne JSON. Nous analyserons l'optimisation et la performance de ce processus : du choix de la bibliothèque au réglage fin du sérialiseur. Vous apprendrez à éviter les erreurs typiques qui ralentissent votre application et à écrire un code qui fonctionne à une vitesse fulgurante.
\n\nMéthode de base : comment transformer un objet C# en chaîne JSON
\n\nCommençons par les classiques. Supposons que nous ayons une classe simple User :
public class User\n{\n public int Id { get; set; }\n public string Name { get; set; }\n public string Email { get; set; }\n}\n\nLa manière la plus simple de le sérialiser est d'utiliser Newtonsoft.Json (également appelé Json.NET) :
\n\nusing Newtonsoft.Json;\n\nvar user = new User { Id = 1, Name = "Алексей", Email = "alex@example.com" };\nstring json = JsonConvert.SerializeObject(user);\nConsole.WriteLine(json); \n// {"Id":1,"Name":"Алексей","Email":"alex@example.com"}\n\nAvec la sortie de .NET Core 3.0, un sérialiseur natif System.Text.Json est apparu — une alternative rapide et légère :
\n\nusing System.Text.Json;\n\nvar user = new User { Id = 1, Name = "Алексей", Email = "alex@example.com" };\nstring json = JsonSerializer.Serialize(user);\nConsole.WriteLine(json);\n// {"Id":1,"Name":"Алексей","Email":"alex@example.com"}\n\nIl semblerait qu'il n'y ait pas de différence. Mais lorsque votre application traite des milliers de requêtes par seconde, le choix du sérialiseur devient critique.
\n\nPerformance : Newtonsoft.Json vs System.Text.Json
\n\nExaminons la performance de sérialisation dans .NET 8. Dans des tests avec 1 million d'opérations :
\n\n- \n
- System.Text.Json — en moyenne 40 à 60 % plus rapide que Newtonsoft.Json pour la sérialisation d'objets simples. \n
- Newtonsoft.Json — perd en vitesse, mais gagne en flexibilité : prend en charge plus de convertisseurs personnalisés et d'attributs. \n
- Consommation mémoire — System.Text.Json génère moins de déchets, ce qui réduit la charge sur le ramasse-miettes (GC). \n
Cependant, il y a une nuance : si vous avez besoin du support de JsonIgnore, JsonPropertyName ou de convertisseurs complexes, Newtonsoft.Json reste indispensable. Mais pour la plupart des projets modernes sur .NET 6+, il est recommandé d'utiliser System.Text.Json.
Optimisation de la sérialisation : 5 conseils pratiques
\n\nPassons maintenant à la partie la plus intéressante — comment rendre votre code encore plus rapide.
\n\n1. Utilisez les générateurs de source (source generators)
\n\nSystem.Text.Json prend en charge la génération de source — il s'agit de la compilation du code de sérialisation à l'étape de construction, et non à l'exécution. Résultat : une accélération de 2 à 3 fois !
\n\n[JsonSerializable(typeof(User))]\npublic partial class UserContext : JsonSerializerContext\n{\n}\n\n// Utilisation :\nstring json = JsonSerializer.Serialize(user, UserContext.Default.User);\n\nCette approche est particulièrement efficace pour les grands modèles et les applications à forte charge.
\n\n2. Configurez le sérialiseur selon vos tâches
\n\nN'utilisez pas les paramètres par défaut. Désactivez les options inutiles :
\n\nvar options = new JsonSerializerOptions\n{\n PropertyNamingPolicy = JsonNami