Tengo un método de controlador Car WebAPI como se muestra a continuación: tenga en cuenta que _carService.GetCarData devuelve una colección de objetos CarDataDTO
[HttpGet] [Route("api/Car/Retrieve/{carManufacturerID}/{year}")] public IEnumerable<CarData> RetrieveTest(int carManufacturerID, int year) { //Mapper.Map<> var cars = _carService.GetCarData(carManufacturerID, year); //var returnData = Mapper.Map<CarData, CarDataDTO>(); return cars; }CarData es un modelo WebAPI que he creado.
public class CarData { public string Model { get; set; } public string Colour { get; set; } //other properties removed from brevity }CarDataDTO es una clase que he creado que modela la tabla DB: recupero los datos a través de un proceso almacenado llamado con dapper.
public class CarDataDTO { public int CarID { get; set; } public int CarManufacturerID { get; set; } public int Year { get; set; } public string Model { get; set; } public string Colour { get; set; } //other properties removed from brevity }Si tengo un punto de interrupción en la línea var cars en mi controlador API, puedo ver que todo se devuelve como se esperaba y tengo una colección de objetos CarDTO. Sin embargo, no requiero que WebAPI devuelva CarDataID, CarID o Year, por lo que creé el modelo CarData API.
¿Cómo puedo usar fácilmente Automapper para mapear solo las propiedades que me preocupan?
¿Necesito configurar algo en mi clase WebApiConfig?
Puede instalar el paquete nuget de AutoMapper desde: AutoMapper y luego declarar una clase como:
public class AutoMapperConfig { public static void Initialize() { Mapper.Initialize((config) => { config.CreateMap<Source, Destination>().ReverseMap(); }); } }Y luego llame a esto en su Global.asax así:
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AutoMapperConfig.Initialize(); GlobalConfiguration.Configure(WebApiConfig.Register); } }Y si desea ignorar ciertas propiedades, puede hacer algo como esto:
Mapper.CreateMap<Source, Destination>() .ForMember(dest => dest.SomePropToIgnore, opt => opt.Ignore())Y la forma en que usa esto para el mapeo es:
DestinationType obj = Mapper.Map<SourceType, DestinationType>(sourceValueObject); List<DestinationType> listObj = Mapper.Map<List<SourceType>, List<DestinationType>>(enumarableSourceValueObject);