AutoMapper: create instance of destination type if

2019-04-04 15:52发布

问题:

Is it possible to configure AutoMapper to return a new instance of the destination type if the source object is null?

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();

回答1:

Answering my own question (partially):

AutoMapper has a configuration property named AllowNullDestinationValues which is set to true by default. By setting this to false, I get the behavior shown in the question, e.g:

Mapper.Configuration.AllowNullDestinationValues = false;

//...

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

This solution works OK for simple types, where source and destination types map well. I still have some issues with complex mappings (I will update the question to show an example).



回答2:

You can also use .NullSubstitute() to replace NULL value to some custom value for any property in Automapper, e.g.:

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


标签: AutoMapper