C# 自动映射,尝试并捕获映射

C# 自动映射,尝试并捕获映射,c#,exception,try-catch,automapper,C#,Exception,Try Catch,Automapper,但是,我已经创建了一张地图。。一些源属性会不时抛出异常(不要问我为什么有人决定在“get”为null时抛出异常..但是很好..) 当AutoMapper尝试映射属性时,这会导致一些问题,是否仍要尝试捕获映射中的异常,如果异常进入缓存,则只需为目标属性指定一个默认值 比尔, Inx你考虑过吗 Automapper.Mapper.CreateMap<Source,Dest>().BeforeMap(Action<Source, Dest> beforeMapAction)`

但是,我已经创建了一张地图。。一些源属性会不时抛出异常(不要问我为什么有人决定在“get”为null时抛出异常..但是很好..) 当AutoMapper尝试映射属性时,这会导致一些问题,是否仍要尝试捕获映射中的异常,如果异常进入缓存,则只需为目标属性指定一个默认值

比尔, Inx

你考虑过吗

Automapper.Mapper.CreateMap<Source,Dest>().BeforeMap(Action<Source, Dest> beforeMapAction)`
Automapper.Mapper.CreateMap().BeforeMap(操作beforeMappAction)`
?

有时,您可能需要在映射发生之前或之后执行自定义逻辑。这些应该是罕见的,因为在AutoMapper之外做这项工作更为明显。可以在映射操作之前/之后创建全局映射:

Mapper.CreateMap<Source, Dest>()
.BeforeMap((src, dest) => src.Value = src.Value + 10)
.AfterMap((src, dest) => dest.Name = "John");
Mapper.CreateMap()
.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);
});
inti=10;
Map(src,opt=>{
opt.BeforeMap((src,dest)=>src.Value=src.Value+i);
opt.AfterMap((src,dest)=>dest.Name=HttpContext.Current.Identity.Name);
});
当需要将上下文信息输入到映射操作之前/之后时,后一种配置非常有用

首先,您必须添加属性以忽略列表,然后在映射之前使用

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;
    }
});
AutoMapper.Mapper.CreateMap()。
FormMember((src=>src.PropertyWithException),opt=>opt.Ignore()。
BeforeMap((src,dest)=>
{
尝试
{
dest.PropertyWithException=src.PropertyWithException;
}
抓住
{
dest.PropertyWithException=某些默认值;
}
});

Hmm。。我不太清楚如何使用它。。您的意思是我可以使用.BeforeMap方法中的操作将当前引发异常的属性的值设置为默认值吗。。然后像往常一样,在那之后把一堆福尔蒙伯链起来?