我正在使用Automapper映射下面的类
public class InfoDto
{
public List<string> Names { get; set; }
}
public class Info
{
public List<string> Names { get; set; }
}
如果destination Names
为空或为空,我想保留source Names
的值。我尝试按以下方式配置Mapper,但似乎在映射之前清除了destination Names
。
CreateMap<InfoDto, Info>()
.ForMember(d => d.Names,
opt => opt.MapFrom(
(src, dest) =>
src.Names != null && src.Names.Any() ? src.Names : dest.Names));
var infoDto = new InfoDto{ Names = new List<string>{"Test1", "Test2"}};
var info = Mappert.Map<Info>(infoDto);
var infoDto1 = new InfoDto{ Names = null};
Mapper.Map<InfoDto, Info>(infoDto1, info);
// info.Names should be list with 2 values
是否有一种方法可以检索/保留destination Names
值并在source Names
为空的情况下使用它?
答案 0 :(得分:-1)
我不知道是否还有其他解决方案,但是我刚刚测试并可以使用。
我经常发现用Aftermap
方法处理更复杂的映射很有用。它给您更多的自由来增加一些额外的复杂性。在这种情况下,您可以创建一个这样的地图:
CreateMap<InfoDto, Info>()
.ForMember(d => d.Names, opt => opt.Ignore())
// here you can map other properties just regularly if you want
.AfterMap(mapNames);
您忽略要在Aftermap
方法中映射的属性。
在您的情况下,Aftermap
看起来像这样:
private void mapNames(InfoDto source, Info destination)
{
if (source.Names != null && source.Names.Any())
{
destination.Names = source.Names;
}
}