我已经创建了一个地图,但是..一些源属性会不时抛出一个异常(不要问我为什么有人决定使“get”抛出异常,如果它的null ...但是。 。) 当AutoMapper尝试映射属性时,这会导致一些问题,无论如何尝试在映射中捕获异常,如果它进入缓存,那么只需为目标属性分配一个默认值?
BR, Inx
答案 0 :(得分:3)
您是否考虑过
Automapper.Mapper.CreateMap<Source,Dest>().BeforeMap(Action<Source, Dest> beforeMapAction)`
来自https://github.com/AutoMapper/AutoMapper/wiki/Before-and-after-map-actions
有时,您可能需要在地图发生之前或之后执行自定义逻辑。这些应该是罕见的,因为在AutoMapper之外进行这项工作更为明显。您可以在地图操作之前/之后创建全局:
Mapper.CreateMap<Source, Dest>() .BeforeMap((src, dest) => src.Value = src.Value + 10) .AfterMap((src, dest) => dest.Name = "John");
或者您可以在映射期间创建地图回调之前/之后:
int i = 10; Mapper.Map<Source, Dest>(src, opt => { opt.BeforeMap((src, dest) => src.Value = src.Value + i); opt.AfterMap((src, dest) => dest.Name = HttpContext.Current.Identity.Name); });
当您需要在地图操作之前/之后输入上下文信息时,后一种配置很有用。
首先,您必须将您的属性添加到忽略列表,然后在map之前使用。
AutoMapper.Mapper.CreateMap<Source,Dest>().
ForMember((src => src.PropertyWithException), opt => opt.Ignore()).
BeforeMap((src,dest)=>
{
try
{
dest.PropertyWithException = src.PropertyWithException;
}
catch
{
dest.PropertyWithException = some_default_value;
}
});