Mapster pour C# (.NET) : guide complet avec exemples
Mapster est une bibliothèque de mapping objet (object-to-object mapping) haute performance pour l'écosystème .NET. Elle permet de transformer automatiquement des objets d'un type à un autre, évitant ainsi au développeur d'écrire du code répétitif de recopie de propriétés. Contrairement à des solutions plus lourdes comme AutoMapper, Mapster mise sur la vitesse d'exécution et une consommation mémoire minimale, comme le confirment de nombreux benchmarks.
Pourquoi utiliser le mapping objet ? Dans les projets réels, nous devons constamment transformer des données : DTO (Data Transfer Object) en Entity, ViewModel en Model, Model en Response, etc. Recopier manuellement chaque champ est fastidieux, source d'erreurs et complique la maintenance du code. Mapster résout ce problème en offrant une API simple, flexible et rapide pour le mapping automatique.
Mapster génère le code de mapping à la compilation (via les analyseurs Roslyn) ou utilise la compilation dynamique d'expressions. Cela en fait l'un des mappeurs les plus rapides de l'écosystème .NET, dépassant souvent même la recopie manuelle dans certains scénarios. La bibliothèque prend en charge des cas complexes : objets imbriqués, collections, mapping conditionnel, ignorance de champs, adaptateurs pour différents types, et bien plus encore.
Installation
L'installation de Mapster se fait via le gestionnaire de packages NuGet. Exécutez l'une des commandes suivantes dans la console du gestionnaire de packages :
dotnet add package Mapster
Ou via la console du gestionnaire de packages :
Install-Package Mapster
Pour une utilisation avec ASP.NET Core et l'injection de dépendances (DI), il est recommandé d'installer le package supplémentaire :
dotnet add package Mapster.DependencyInjection
Après l'installation, ajoutez using Mapster; au début de votre fichier.
Démarrage rapide
Prenons un exemple simple : nous avons une classe User (modèle de base de données) et une classe UserDto (pour l'envoi au client).
using Mapster;
// Classe source
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
}
// Classe cible
public class UserDto
{
public int Id { get; set; }
public string FullName { get; set; }
public string Email { get; set; }
}
// Exemple d'utilisation
public class Program
{
public static void Main()
{
var user = new User
{
Id = 1,
Name = "Jean Dupont",
Email = "jean@example.com",
CreatedAt = DateTime.Now
};
// Mapping avec Mapster
var dto = user.Adapt<UserDto>();
Console.WriteLine($"Id: {dto.Id}, Nom: {dto.FullName}, Email: {dto.Email}");
// Affichage : Id: 1, Nom: Jean Dupont, Email: jean@example.com
}
}
Remarque : la propriété Name a été automatiquement associée à FullName, car Mapster essaie par défaut de trouver des correspondances par nom (insensible à la casse). Si UserDto avait une propriété Name, elle aurait également été mappée.
Méthodes et classes principales
Examinons les méthodes clés de Mapster. Pour chacune, nous donnons la signature, la description et un exemple.
1. Adapt<TDestination>(object source)
Signature : public static TDestination Adapt<TDestination>(this object source)
Description : Méthode d'extension de base pour mapper un objet vers un autre. Crée une nouvelle instance de TDestination et copie les valeurs des propriétés de source.
var user = new User { Id = 1, Name = "Anna" };
var dto = user.Adapt<UserDto>();
Console.WriteLine(dto.Ful