High-performance, lightweight object-to-object mapper
$ dotnet add package Easy-MapperEasyMapper is a blazing-fast, reflection-free object mapper for .NET 8 and .NET 9 — designed as a free alternative to AutoMapper.
It uses IL emission, expression trees, and runtime caching to deliver mapping speeds close to handwritten code.
AddEasyMapper)dotnet add package EasyMapper
using EasyMapper;
using EasyMapper.Configuration;
// Configure mappings once at startup
MapperConfig.CreateMap<UserDto, User>();
// Map objects
var user = EasyMapper.Map<UserDto, User>(new UserDto
{
Name = "Alice",
Age = 25
});
MapperConfig.CreateMap<UserDto, User>()
.ForMember("Age", opt => opt.ValueConverter = a => (int)a! + 1)
.ForMember("Name", opt => opt.CustomMap = src => src.Name.ToUpper())
.IgnoreMember("Password");
var source = new UserDto { Name = "Bob", Age = 30 };
var destination = new User();
EasyMapper.Map(source, destination);
builder.Services.AddEasyMapper();
Then inject anywhere:
public class MyService
{
private readonly IMappingEngine _mapper;
public MyService(IMappingEngine mapper)
{
_mapper = mapper;
}
public void DoSomething(UserDto dto)
{
var entity = _mapper.Map<UserDto, User>(dto);
}
}
| Mapper | Time (ns) | Relative | Alloc (B) |
|---|---|---|---|
| Handwritten | 18.49 ns | 1.00× | 96 B |
| EasyMapper (new) | 54.98 ns | 2.97× | 96 B |
| EasyMapper (in place) | 42.10 ns | 2.28× | 24 B |
| AutoMapper | 88.18 ns | 4.77× | 96 B |
Licensed under the MIT License — completely free for commercial and personal use.