LINQ et JSON en C#
1) Pourquoi LINQ et JSON ?
- LINQ : interroger/transformer des collections de façon lisible.
- JSON : sauvegarder et échanger les données d'une application.
2) LINQ essentiel
Soit une liste flotte de véhicules.
var disponibles = flotte.Where(v => v.EstDisponible).ToList();
var top3 = flotte.OrderByDescending(v => v.PrixJournalier).Take(3).ToList();
var moyenne = flotte.Any() ? flotte.Average(v => v.PrixJournalier) : 0m;
var statsParType = flotte
.GroupBy(v => v.Type)
.Select(g => new { Type = g.Key, Nombre = g.Count(), PrixMoyen = g.Average(v => v.PrixJournalier) })
.ToList();
Méthodes à maîtriser :
Where,Select,OrderBy,OrderByDescending,Take,FirstOrDefault,Any,Count,Average,GroupBy.
3) JSON avec System.Text.Json
using System.Text.Json;
public static class VehiculeStorage
{
public static void Save(string path, List<VehiculeDto> vehicules)
{
var json = JsonSerializer.Serialize(vehicules, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(path, json);
}
public static List<VehiculeDto> Load(string path)
{
if (!File.Exists(path))
return new List<VehiculeDto>();
var json = File.ReadAllText(path);
return JsonSerializer.Deserialize<List<VehiculeDto>>(json) ?? new List<VehiculeDto>();
}
}
4) Gérer les erreurs utiles
Cas à traiter :
- fichier absent,
- JSON invalide,
- collection vide pour
Average.
decimal moyennePrix = flotte.Any() ? flotte.Average(v => v.PrixJournalier) : 0m;
5) Exercices d'application
Exercice 1
Écrire 3 requêtes LINQ :
- véhicules disponibles,
- top 5 par prix,
- prix moyen par type.
Exercice 2
Écrire Save et Load pour une liste ClientDto dans clients.json.
Exercice 3
Gérer les erreurs de chargement JSON (retour liste vide + message explicite).
Exercice 4
Transformer une boucle foreach existante en LINQ, puis comparer lisibilité.
6) TP guidé (1h)
- Ajouter un service
StatsServicebasé sur LINQ. - Ajouter
Save/LoadJSON sur l'inventaire. - Afficher 5 statistiques à l'écran.
- Vérifier le comportement sur données vides.
7) Livrable attendu
- Fichier JSON fonctionnel.
- 5 requêtes LINQ métier commentées.
- Gestion des cas limites sans crash.