MapsterMapper/Mapster is an open-source project on GitHub with 5.2k stars, written primarily in C#. A fast, fun and stimulating object to object Mapper
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
Mapster creates the destination object and maps values to it.
var destObject = sourceObject.Adapt<Destination>();
Mapping to an existing object
You create the object, Mapster maps to the object.
sourceObject.Adapt(destObject);
Use Mapster with Dependency Injection
You can get your IMapper instance via dependency injection, so you do not have to change code, when migrating to mapster from automapper!
Just add Mapster to service collection:
services.AddMapster();
And use it with DI in your Project:
public class Test
{
public Test(IMapper mapper)
{
var sourceObject = mapper.Adapt<Destination>();
}
}
Queryable Extensions
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();
}
Generating models & mappers
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 for you:
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 => ...
}
Mapster was designed to be efficient on both speed and memory. The repository includes a benchmark project in src/Benchmark that compares the local Mapster build, its compiler variants, and other modern mapping libraries like AutoMapper, Mapperly, and Facet.
Roslyn Compiler
FEC
Code generation
Facet
Mapperly
The snapshot below shows the FlatTypes scenario (Person -> PersonDTO), a best-case DTO with simple property-to-property mapping and no nested objects or collections.
[!NOTE]
More complex object shapes can change the relative results. See the complete benchmark results for ComplexTypes, RecursiveTypes, and TotalAllTypes.
Method
MapOperations
Mean
StdDev
Error
Ns/Map
Ratio
Gen0
Allocated
Alloc Ratio
Bytes/Map
Mapster 10.0.8
1000000
6.849 ms
0.6851 ms
1.0358 ms
6.849
1.01
4781
76.29 MB
1.00
80
Mapster 10.0.8 (Roslyn)
1000000
6.579 ms
0.2782 ms
0.4206 ms
6.579
0.97
4781
76.29 MB
1.00
80
Mapster 10.0.8 (FEC)
1000000
6.549 ms
0.9130 ms
1.3803 ms
6.549
0.97
4781
76.29 MB
1.00
80
Mapster 10.0.8 (Codegen)
1000000
5.868 ms
0.3266 ms
0.5488 ms
5.868
0.86
4781
76.29 MB
1.00
80
AutoMapper 14.0.0
1000000
29.645 ms
0.8963 ms
1.5062 ms
29.645
4.37
4750
76.29 MB
1.00
80
Facet 6.5.5
1000000
7.801 ms
1.0231 ms
1.5467 ms
7.801
1.15
8601
137.33 MB
1.80
144
Facet 6.5.5 (Compiled Projection)
1000000
5.508 ms
0.7064 ms
1.0679 ms
5.508
0.81
4781
76.29 MB
1.00
80
Mapperly 4.3.1
1000000
6.521 ms
0.8369 ms
1.2652 ms
6.521
0.96
4781
76.29 MB
1.00
80
Step into debugging
Step-into debugging lets you debug your mapping and inspect values just like your code.
Code Generation
Code generation allows you to
Validate mapping at compile time
Getting raw performance
Seeing your mapping code & debugging
Finding usage of your models' properties
There are currently two tools which you can choose based on your preferences.
Mapster.Tool NEW!
TextTemplate
Change logs
https://github.com/MapsterMapper/Mapster/releases
Usage Guides with Translations
English
中文文档 (sp thx to @staneee)
Acknowledgements
JetBrains kindly provides Mapster with a free open-source licence for their Resharper and Rider.
MapsterMapper/Mapster has 5.2k GitHub stars — refresh the page for the live number, or check github.com/MapsterMapper/Mapster. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is MapsterMapper/Mapster open source?
Yes — MapsterMapper/Mapster ships under the MIT license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/MapsterMapper/Mapster.
What is MapsterMapper/Mapster?
MapsterMapper/Mapster (MapsterMapper/Mapster) is a C# project on GitHub. From the project's own README: A fast, fun and stimulating object to object Mapper
Where can I see MapsterMapper/Mapster in action?
The project maintains a homepage at http://mapstermapper.github.io/Mapster/. The README tab on this page also usually contains screenshots and a quickstart.
Where do I read more about MapsterMapper/Mapster?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/MapsterMapper/Mapster is the definitive source.
Read full README in the tab above.
Still deciding about Mapster?
One click hands the question to an AI along with this page — see what it says about Mapster.