AgileMapper es una de las bibliotecas más populares para el mapeo de objetos en C# en aplicaciones .NET debido a su facilidad de uso y rendimiento.
Es una alternativa a Mapper más conocidos como Automapper o Mapster, bajo una filosofía de sencillez, sin sacrificar el rendimiento.
AgileMapper destaca en especial a la hora de trabajar con el mapeo de objetos complejos, reduciendo el tiempo de codificación.
Además proporciona una gran cantidad de opciones de configuración para personalizar el comportamiento del mapeo de objetos, que son habituales en cualquier biblioteca de mapper.
Por ejemplo, se puede establecer un valor predeterminado para un campo en caso de que no se encuentre en el objeto de origen, o se puede especificar una conversión personalizada para un campo específico.
Cómo usar AgileMapper
Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.
Install-Package AgileObjects.AgileMapper
Una vez que se ha instalado la librería, podemos empezar a utilizarla en el código. Por ejemplo, si quisiéramos mapear un objeto de tipo Person
a un objeto de tipo PersonViewModel
, simplemente tenemos que hacer,
var person = new Person
{
FirstName = "John",
LastName = "Doe",
Age = 30
};
// proyectar a nuevo objeto
var personViewModel = Mapper.Map(person).ToANew<PersonViewModel>();
También nos permite realizar operaciones sobre colecciones de elementos. En este caso la comparación se realiza por la propiedad Id.
var source = new[]
{
new CustomerViewModel { Id = 1, Name = "Rod" },
new CustomerViewModel { Id = 2, Name = "Jane" },
new CustomerViewModel { Id = null, Name = "Freddy" }
};
var target = Collection<Customer>
{
new Customer { CustomerId = 1, Name = "Bungle" },
new Customer { CustomerId = 2, Name = null },
new Customer { CustomerId = 3, Name = "Zippy" }
};
// Update (actualiza los valores de source en target)
var result = Mapper.Map(source).Over(target);
/// Merge (incluye los valores de source en target si son null)
var result = Mapper.Map(source).OnTo(target);
Si queremos modificar la configuración del mapeo podemos usar un objeto MapperConfiguration
- Por ejemplo, si queremos establecer un valor predeterminado para un campo que no se encuentra en el objeto de origen, podemos hacer lo siguiente:
var config = new MapperConfiguration(cfg => cfg
.WhenMapping
.From<Person>()
.To<PersonViewModel>()
.Map("Email")
.To(vm => vm.EmailAddress)
.Use("No email address provided"));
AgileMapper es Open Source, y todo el código y documentación está disponible en el repositorio del proyecto en https://github.com/agileobjects/AgileMapper