Automapper 自动将源属性映射到内部目标对象
我有一个源类:Automapper 自动将源属性映射到内部目标对象,automapper,Automapper,我有一个源类: class Source { public string Name; public string Field1; public string Field2; } 和两个目的地类别: class Destination { public string Name; public FieldsDto Fields; } class FieldsDto { public string Field1; public string
class Source {
public string Name;
public string Field1;
public string Field2;
}
和两个目的地类别:
class Destination {
public string Name;
public FieldsDto Fields;
}
class FieldsDto {
public string Field1;
public string FieldTwo;
}
如何将源.Field1
映射到目标.Fields.Field1
和源.Field2
映射到目标.Fields.Field2
这个代码不起作用;它将抛出一个错误,指出成员的自定义配置仅支持顶级individd
type1上的ual成员
:
Mapper.Initialize(cfg => {
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Fields.Field1, opt => opt.Mapfrom(src => src.Field1)
.ForMember(dest => dest.Fields.FieldTwo, opt => opt.Mapfrom(src => src.Field2);
});
Mapper.Initialize(cfg=>{
cfg.CreateMap()
.FormMember(dest=>dest.Fields.Field1,opt=>opt.Mapfrom(src=>src.Field1)
.FormMember(dest=>dest.Fields.FieldTwo,opt=>opt.Mapfrom(src=>src.Field2);
});
如注释中所述,为了映射嵌套属性,您需要使用ForPath
而不是ForMember
。因此完整配置可能如下所示:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(s => s.Name))
.ForPath(dest => dest.Fields.Field1, opt => opt.MapFrom(src => src.Field1))
.ForPath(dest => dest.Fields.FieldTwo, opt => opt.MapFrom(src => src.Field2));
});
改为使用路径。@LucianBargaoanu您能详细说明一下吗?不太清楚,只需搜索前面的答案。
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Source, FieldsDto>()
.ForMember("Field1", opt => opt.MapFrom("Field1"))
.ForMember("FieldTwo", opt => opt.MapFrom("Field2"));
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(s => s.Name))
.ForMember(dest => dest.Fields, opt => opt.MapFrom(s => Mapper.Map<FieldsDto>(s)));
});