A fast, fun and stimulating object to object Mapper
Writing mapping methods is a machine job. Do not waste your time, let Mapster do it.
Install Mapster with the NuGet CLI:
Install-Package Mapster
Or use the .NET core CLI to install Mapster:
dotnet add package Mapster
Mapster creates the destination object and maps values to it.
var destObject = sourceObject.Adapt<Destination>();
You create the object, Mapster maps to the object.
sourceObject.Adapt(destObject);
Add Mapster to service collection
services.AddMapster();
And use it with DI
public class Test
{
public Test(IMapper mapper)
{
var sourceObject = mapper.Adapt<Destination>();
}
}
Mapster also provides extensions to map queryables.
using (MyDbContext context = new MyDbContext())
{
// Build a Select Expression from DTO
var destinations = context.Sources.ProjectToType<Destination>().ToList();
// Versus creating by hand:
var destinations = context.Sources.Select(c => new Destination {
Id = c.Id,
Name = c.Name,
Surname = c.Surname,
....
})
.ToList();
}
No need to write your own DTO classes. Mapster provides Mapster.Tool to help you generating models. And if you would like to have explicit mapping, Mapster also generates mapper class for you.
[AdaptTo("[name]Dto"), GenerateMapper]
public class Student {
...
}
Then Mapster will generate:
public class StudentDto {
...
}
public static class StudentMapper {
public static StudentDto AdaptToDto(this Student poco) { ... }
public static StudentDto AdaptTo(this Student poco, StudentDto dto) { ... }
public static Expression<Func<Student, StudentDto>> ProjectToDto => ...
}
ISet
, IDictionary
, IReadOnlyDictionary
supportEmptyCollectionIfNull
, CreateNewIfNull
DestinationTransformMapster was designed to be efficient on both speed and memory. You could gain a 4x performance improvement whilst using only 1/3 of memory.
And you could gain up to 12x faster performance with
Method | Mean | StdDev | Error | Gen 0 | Gen 1 | Gen 2 | Allocated |
---|---|---|---|---|---|---|---|
‘Mapster 6.0.0’ | 108.59 ms | 1.198 ms | 1.811 ms | 31000.0000 | - | - | 124.36 MB |
‘Mapster 6.0.0 (Roslyn)’ | 38.45 ms | 0.494 ms | 0.830 ms | 31142.8571 | - | - | 124.36 MB |
‘Mapster 6.0.0 (FEC)’ | 37.03 ms | 0.281 ms | 0.472 ms | 29642.8571 | - | - | 118.26 MB |
‘Mapster 6.0.0 (Codegen)’ | 34.16 ms | 0.209 ms | 0.316 ms | 31133.3333 | - | - | 124.36 MB |
‘ExpressMapper 1.9.1’ | 205.78 ms | 5.357 ms | 8.098 ms | 59000.0000 | - | - | 236.51 MB |
‘AutoMapper 10.0.0’ | 420.97 ms | 23.266 ms | 35.174 ms | 87000.0000 | - | - | 350.95 MB |
Step-into debugging lets you debug your mapping and inspect values just like your code.
Code generation allows you to
There are currently two tools which you can choose based on your preferences.
https://github.com/MapsterMapper/Mapster/releases
JetBrains kindly provides Mapster with a free open-source licence for their Resharper and Rider.