我有一个 Car WebAPI Controller 方法,如下所示 - 注意 _carService.GetCarData 返回 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 是我创建的 WebAPI 模型。
public class CarData
{
public string Model { get; set; }
public string Colour { get; set; }
//other properties removed from brevity
}
CarDataDTO 是我创建的一个模拟数据库表的类 - 我通过使用 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
}
如果我在我的 API Controller 中的 var cars 行上有一个断点,我可以看到按预期返回的所有内容,并且我有一个 CarDTO 对象集合。但是,我不要求 WebAPI 返回 CarDataID、CarID 或年份,这就是我创建 CarData API 模型的原因。
我怎样才能轻松地使用 Automapper 只映射我关心的属性?
我需要在我的 WebApiConfig 类中设置一些东西吗?
最佳答案
您可以从以下位置安装 AutoMapper nuget 包:AutoMapper 然后声明一个类:
public class AutoMapperConfig
{
public static void Initialize()
{
Mapper.Initialize((config) =>
{
config.CreateMap<Source, Destination>().ReverseMap();
});
}
}
然后在您的 Global.asax 中这样调用它:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AutoMapperConfig.Initialize();
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
如果你想忽略某些属性,那么你可以这样做:
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomePropToIgnore, opt => opt.Ignore())
您使用它进行映射的方式是:
DestinationType obj = Mapper.Map<SourceType, DestinationType>(sourceValueObject);
List<DestinationType> listObj = Mapper.Map<List<SourceType>, List<DestinationType>>(enumarableSourceValueObject);
关于c# - WebAPI Controller 中的自动映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812430/