Automapper in WebAPI Controller
You could install the AutoMapper nuget package from: AutoMapper And then declare a class like:
public class AutoMapperConfig
{
public static void Initialize()
{
Mapper.Initialize((config) =>
{
config.CreateMap<Source, Destination>().ReverseMap();
});
}
}
And then call this in your Global.asax like this:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AutoMapperConfig.Initialize();
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
And if you would like to ignore certain properties then you could do something like this:
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomePropToIgnore, opt => opt.Ignore())
And the way you use this for mapping is:
DestinationType obj = Mapper.Map<SourceType, DestinationType>(sourceValueObject);
List<DestinationType> listObj = Mapper.Map<List<SourceType>, List<DestinationType>>(enumarableSourceValueObject);
Ctrl_Alt_Defeat
Updated on July 09, 2022Comments
-
Ctrl_Alt_Defeat almost 2 years
I have a Car WebAPI controller method as below - note _carService.GetCarData returns a collection of CarDataDTO objects
[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 is a WebAPI model I have created.
public class CarData { public string Model { get; set; } public string Colour { get; set; } //other properties removed from brevity }
CarDataDTO is a class I have created that models the DB Table - I retrieve the Data via a stored proc called with 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 }
If I have a breakpoint on the var cars line in my API controller I can see everything returned as expected and I have a collection of CarDTO objects. However, I don't require the WebAPI to return the CarDataID, CarID or Year which is why I created the CarData API model.
How can I easily use Automapper to only map the properties I am concerned with?
Do I need something set up in my WebApiConfig class?