I'll publish the source code very soon on github.
A tiny and quick object mapper for .Net v8.0+ Inspired by AutoMapper and TinyMapper, I'm trying to create a library named StoneKit which is based on dotnet core 8 features. Transverse is a part of that library and I'm aimed to make it the tiniest and fastest mapping library in dotnet.
Right now it performs faster than AutoMapper and I'm trying to improve it constantly. There is a benchmark project in the source code that I'm developing to showcase the performance.
| Method | Mean | Error | StdDev | Median |
|---|---|---|---|---|
| CollectionMapping_AutoMapper | 2.061 µs | 0.0405 µs | 0.0433 µs | 2.055 µs |
| CollectionMapping_Transverse | 1.802 µs | 0.0649 µs | 0.1872 µs | 1.722 µs |
| CollectionMapping_Handwritten | 1.474 µs | 0.0379 µs | 0.1075 µs | 1.459 µs |
Available on nuget
PM> Install-Package StoneKit.TransverseMapper
Transverse.Bind<Person, PersonDto>();
var person = new Person
{
Id = Guid.NewGuid(),
FirstName = "John",
LastName = "Doe"
};
var personDto = Transverse.Map<PersonDto>(person);Ignore mapping source members and bind members with different names/types
Transverse.Bind<Person, PersonDto>(config =>
{
config.Ignore(x => x.Id);
config.Ignore(x => x.Email);
config.Bind(source => source.LastName, target => target.Surname);
config.Bind(target => source.Emails, typeof(List<string>));
});
var person = new Person
{
Id = Guid.NewGuid(),
FirstName = "John",
LastName = "Doe",
Emails = new List<string>{"support@tinymapper.net", "MyEmail@tinymapper.net"}
};
var personDto = Transverse.Map<PersonDto>(person);Transverse only supports dotnet core 8.0