假设我们有两个类,其中一个类嵌套了另一个类:
public class SourceClass
{
public int Id { get; set; }
public NestedSourceClass NestedClass { get; set; }
}
public class NestedSourceClass
{
public string Name { get; set; }
}
我们使用AutoMapper将SourceClass映射到TargetClass:
public class TargetClass
{
public int Id { get; set; }
public NestedTargetClass NestedClass { get; set; }
}
public class NestedTargetClass
{
public string Name { get; set; }
}
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap()
.ReverseMap();
});
var mapper = config.CreateMapper();
var source = new SourceClass
{
Id = 1,
NestedClass = new NestedSourceClass
{
Name = "Nested"
}
};
var target = mapper.Map(source);
// 此时SourceClass和TargetClass都映射成功了
// 但是如果我们尝试使用ReverseMap将TargetClass映射回SourceClass,则会出错
var sourceAfterReverseMap = mapper.Map(target);
这里,ReverseMap无法处理嵌套对象。为了解决这个问题,我们需要在映射配置中手动指定嵌套类的映射:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap()
.ForMember(dest => dest.NestedClass, opt => opt.MapFrom(src => src.NestedClass))
.ReverseMap()
.ForMember(dest => dest.NestedClass, opt => opt.MapFrom(src => src.NestedClass));
});
现在,我们可以正常使用ReverseMap了。