问题
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)));
来源:https://stackoverflow.com/questions/3407838/automapper-create-instance-of-destination-type-if-source-null