AutoMapper:如果source == null,则创建目标类型的实例

M4N*_*M4N 13 automapper

如果源对象为空,是否可以将AutoMapper配置为返回目标类型的新实例?

Source source = null;
Dest d1 = AutoMapper.Mapper.Map<Source, Dest>(source);
// d1 == null

// I'm looking for a way to configure AutoMapper to
// eliminate this code:
Dest d2 = AutoMapper.Mapper.Map<Source, Dest>(source) ?? new Dest();
Run Code Online (Sandbox Code Playgroud)

M4N*_*M4N 18

回答我自己的问题(部分):

AutoMapper有一个名为的配置属性,默认AllowNullDestinationValues设置为true.通过设置false,我得到问题中显示的行为,例如:

Mapper.Configuration.AllowNullDestinationValues = false;

//...

Source source = null;
Dest d = AutoMapper.Mapper.Map<Source, Dest>(source);
// d is now a new instance of Dest
Run Code Online (Sandbox Code Playgroud)

此解决方案适用于简单类型,其中源和目标类型映射良好.我仍然遇到复杂映射的一些问题(我将更新问题以显示示例).


Vij*_*jai 6

您还可以使用.NullSubstitute()Automapper 中的任何属性将 NULL 值替换为某个自定义值,例如:

CreateMap<SMModel, VM_SMModel>()
                    .ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12)));
Run Code Online (Sandbox Code Playgroud)