NuGet et dépendances
Notions théoriques
Qu'est-ce que NuGet ?
NuGet est le gestionnaire de paquets officiel de .NET. Il permet d'ajouter des bibliothèques tierces à votre projet. C'est l'équivalent de Maven (Java) ou de Composer (PHP).
- Le dépôt central est nuget.org
- Les dépendances sont déclarées dans le fichier
.csproj - La commande
dotnet add packagetélécharge et référence un paquet
Ajouter un paquet NuGet
Sur Windows (PowerShell) et Linux (Bash) — même commande :
# Ajouter un paquet
dotnet add package Newtonsoft.Json
# Ajouter une version spécifique
dotnet add package Serilog --version 3.1.1
# Lister les paquets installés
dotnet list package
# Restaurer les paquets (après un git clone)
dotnet restore
Le fichier .csproj avec dépendances
Après dotnet add package, le .csproj est automatiquement mis à jour :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="3.1.1" />
</ItemGroup>
</Project>
.gitignore pour .NET
bin/ et obj/Ces dossiers contiennent les fichiers compilés et peuvent être très volumineux. Créez toujours un .gitignore adapté :
dotnet new gitignore
Cela crée un .gitignore qui exclut automatiquement bin/, obj/, les fichiers de secrets, etc.
Sérialisation JSON avec Newtonsoft.Json
using Newtonsoft.Json;
// Objet → JSON (sérialisation)
var eleve = new { Nom = "Alice", Age = 20, Note = 15.5 };
string json = JsonConvert.SerializeObject(eleve, Formatting.Indented);
Console.WriteLine(json);
// JSON → Objet (désérialisation)
string jsonTexte = "{\"Nom\":\"Bob\",\"Age\":21,\"Note\":14.0}";
var obj = JsonConvert.DeserializeObject<dynamic>(jsonTexte);
Console.WriteLine(obj?.Nom);
System.Text.Json — alternative intégrée à .NET
.NET inclut aussi System.Text.Json sans dépendance externe :
using System.Text.Json;
var eleve = new { Nom = "Alice", Age = 20 };
string json = JsonSerializer.Serialize(eleve, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);
Exemple pratique
using Newtonsoft.Json;
// Classe pour la sérialisation
class Etudiant
{
public string Nom { get; set; } = "";
public int Age { get; set; }
public double Note { get; set; }
public string Filiere { get; set; } = "";
}
// Liste d'étudiants
var etudiants = new List<Etudiant>
{
new Etudiant { Nom = "Alice", Age = 20, Note = 15.5, Filiere = "SLAM" },
new Etudiant { Nom = "Bob", Age = 21, Note = 12.0, Filiere = "SISR" },
new Etudiant { Nom = "Charlie", Age = 19, Note = 17.5, Filiere = "SLAM" },
};
// Sérialisation en JSON
string json = JsonConvert.SerializeObject(etudiants, Formatting.Indented);
Console.WriteLine("=== JSON généré ===");
Console.WriteLine(json);
// Sauvegarde dans un fichier
string fichier = "etudiants.json";
File.WriteAllText(fichier, json);
Console.WriteLine($"\nSauvegardé dans : {fichier}");
// Rechargement depuis le fichier
string jsonLu = File.ReadAllText(fichier);
var etudiantsCharges = JsonConvert.DeserializeObject<List<Etudiant>>(jsonLu);
Console.WriteLine("\n=== Rechargés depuis JSON ===");
foreach (var e in etudiantsCharges ?? [])
Console.WriteLine($" {e.Nom,-10} {e.Note:F1}/20 ({e.Filiere})");
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Vous allez sérialiser une liste d'étudiants en JSON et la recharger.
Étape 1 — Installer Newtonsoft.Json
Ajoutez le paquet au projet.
Quand vous clonez un dépôt git contenant un projet C#, les dossiers bin/ et obj/ sont absents (listés dans .gitignore). Exécutez dotnet restore pour télécharger les paquets NuGet listés dans le .csproj avant de lancer dotnet run.
Étape 2 — Sérialiser en JSON
Convertissez une liste d'étudiants en JSON et sauvegardez-la.
En développement, utilisez Formatting.Indented pour produire un JSON lisible par un humain. En production (API, fichiers de grande taille), préférez Formatting.None pour réduire la taille du fichier.
Étape 3 — Recharger depuis le fichier JSON
Relisez le fichier JSON et désérialisez-le.
?? [] pour les résultats nullableDeserializeObject<T> peut retourner null si le JSON est invalide. L'opérateur ?? [] (null-coalescing avec collection expression) fournit une liste vide comme valeur de repli, évitant une NullReferenceException dans le foreach.