Objet C# en JSON dans .NET : Secrets de vitesse et de performance

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi chaque développeur C# doit savoir sérialiser des objets en JSON

\n\n

Avez-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\n

Dans 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\n

Méthode de base : comment transformer un objet C# en chaîne JSON

\n\n

Commençons par les classiques. Supposons que nous ayons une classe simple User :

\n\n
public class User\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public string Email { get; set; }\n}
\n\n

La manière la plus simple de le sérialiser est d'utiliser Newtonsoft.Json (également appelé Json.NET) :

\n\n
using 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\n

Avec la sortie de .NET Core 3.0, un sérialiseur natif System.Text.Json est apparu — une alternative rapide et légère :

\n\n
using 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\n

Il 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\n

Performance : Newtonsoft.Json vs System.Text.Json

\n\n

Examinons 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
\n\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.

\n\n

Optimisation de la sérialisation : 5 conseils pratiques

\n\n

Passons maintenant à la partie la plus intéressante — comment rendre votre code encore plus rapide.

\n\n

1. Utilisez les générateurs de source (source generators)

\n\n

System.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\n

Cette approche est particulièrement efficace pour les grands modèles et les applications à forte charge.

\n\n

2. Configurez le sérialiseur selon vos tâches

\n\n

N'utilisez pas les paramètres par défaut. Désactivez les options inutiles :

\n\n
var options = new JsonSerializerOptions\n{\n    PropertyNamingPolicy = JsonNami                

Blogs

Book Recommendations