Mapster für C# (.NET): Komplettguide mit Beispielen
Mapster ist eine leistungsstarke Bibliothek für das Objekt-zu-Objekt-Mapping (Object-to-Object Mapping) im .NET-Ökosystem. Sie ermöglicht die automatische Konvertierung von Objekten eines Typs in einen anderen und erspart Entwicklern das Schreiben von Routinecode zum Kopieren von Eigenschaften. Im Gegensatz zu Schwergewichten wie AutoMapper legt Mapster den Fokus auf hohe Geschwindigkeit und minimalen Speicherverbrauch, was durch zahlreiche Benchmarks bestätigt wird.
Wozu braucht man Objekt-Mapping? In realen Projekten müssen wir ständig Daten konvertieren: DTOs (Data Transfer Objects) in Entities, ViewModels in Models, Models in Responses und so weiter. Das manuelle Kopieren jedes Feldes ist mühsam, fehleranfällig und erschwert die Code-Wartung. Mapster löst dieses Problem mit einer einfachen, flexiblen und schnellen API für automatisches Mapping.
Mapster generiert den Mapping-Code entweder zur Kompilierungszeit (über Roslyn-Analyzer) oder nutzt dynamische Ausdruckskompilierung. Das macht es zu einem der schnellsten Mapper in .NET, der in manchen Szenarien sogar das manuelle Kopieren übertrifft. Die Bibliothek unterstützt komplexe Anwendungsfälle: verschachtelte Objekte, Sammlungen, bedingtes Mapping, Feld-Ignorierung, Adapter für verschiedene Typen und vieles mehr.
Installation
Die Installation von Mapster erfolgt über den NuGet Package Manager. Führen Sie einen der folgenden Befehle in der Paket-Manager-Konsole aus:
dotnet add package Mapster
Oder über die Package Manager Console:
Install-Package Mapster
Für die Arbeit mit ASP.NET Core und Dependency Injection (DI) empfiehlt sich die Installation des Zusatzpakets:
dotnet add package Mapster.DependencyInjection
Nach der Installation fügen Sie using Mapster; am Anfang Ihrer Datei hinzu.
Schnellstart
Betrachten wir ein einfaches Beispiel: Wir haben eine Klasse User (Datenbankmodell) und eine Klasse UserDto (für die Übertragung an den Client).
using Mapster;
// Quellklasse
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
}
// Zielklasse
public class UserDto
{
public int Id { get; set; }
public string FullName { get; set; }
public string Email { get; set; }
}
// Beispielverwendung
public class Program
{
public static void Main()
{
var user = new User
{
Id = 1,
Name = "Max Mustermann",
Email = "max@example.com",
CreatedAt = DateTime.Now
};
// Mapping mit Mapster
var dto = user.Adapt<UserDto>();
Console.WriteLine($"Id: {dto.Id}, Name: {dto.FullName}, Email: {dto.Email}");
// Ausgabe: Id: 1, Name: Max Mustermann, Email: max@example.com
}
}
Beachten Sie: Die Eigenschaft Name wurde automatisch FullName zugeordnet, da Mapster standardmäßig versucht, Übereinstimmungen anhand des Namens zu finden (Groß-/Kleinschreibung wird ignoriert). Wenn UserDto eine Eigenschaft Name hätte, würde diese ebenfalls zugeordnet werden.
Wichtige Methoden und Klassen
Sehen wir uns die wichtigsten Mapster-Methoden an. Für jede werden Signatur, Beschreibung und ein Beispiel gezeigt.
1. Adapt<TDestination>(object source)
Signatur: public static TDestination Adapt<TDestination>(this object source)
Beschreibung: Die grundlegende Erweiterungsmethode zum Mapping eines Objekts in ein anderes. Erstellt eine neue Instanz von TDestination und kopiert die Eigenschaftswerte aus source.
var user = new User { Id = 1, Name = "Anna" };
var dto = user.Adapt<UserDto>();
Console.WriteLine(dto.FullName); // Ausgabe: Anna Auch in der Bibliothek
Spring Boot für Java: Vollständiger Leitfaden mit Beispielen
NodaTime für C# (.NET): Vollständiges Tutorial mit Beispielen
Protocol Buffers für Java: Komplette Anleitung mit Beispielen
Die C++-Standardbibliothek: Ein vollständiger Überblick über die Funktionen