AutoMapper映射对象

3

这是基于一个源到多个目标的问题提出的额外要求。

class Dest1    
{    
 string prop1;
 string prop2;
 string prop3;
 pubic List<Dest3> Dests3 {get;set;}
}

    class Dest3        
    {    
     string prop7;    
   string prop8;
    }

 class Source2
 {
 string prop7;
 string prop8;
 }
  1. 我需要在自动映射器中将Source2映射到Dest1(同时需要映射Dest3列表)。

我的映射类:(目前不起作用)

 CreateMap<Source2, Dest3>();
            CreateMap<Source2, Dest1>()
                .ForMember(d => d.Dests3 , opt => opt.MapFrom(s => s));
1个回答

2

假设在此映射发生时,Dests3应该是一个单项列表,则其配置应如下所示:

var configuration = new MapperConfiguration(cfg =>
// Mapping Config
cfg.CreateMap<Source2, Dest1>()
    .ForMember(dest => dest.prop1, opt => opt.Ignore())
    .ForMember(dest => dest.prop2, opt => opt.Ignore())
    .ForMember(dest => dest.prop3, opt => opt.Ignore())
    .ForMember(dest => dest.Dests3, opt => opt.MapFrom(src => 
                                                      new List<Dest3> { 
                                                          new Dest3 {
                                                              prop7 = src.prop7,
                                                              prop8 = src.prop8
                                                          }
                                                      }));

// Check AutoMapper configuration
configuration.AssertConfigurationIsValid();

然后,您可以在需要的任何地方使用映射器来处理映射,如下所示:
public class Foo {
    private IMapper _mapper;
    public Foo(IMapper mapper) {
        _mapper = mapper;
    }

    // Map Source2 -> Dest1
    public Dest1 Bar(Source2 source) {
        return _mapper.Map<Dest1>(source);
    }
}

非常感谢...在这种情况下,是否有可能替换掉FirstOrDefault,因为我有15个以上类似的属性 https://docs.automapper.org/en/stable/Flattening.html - Glen
在这种情况下,您不能使用FirstOrDefault。您正在从字符串映射到具有字符串属性的对象列表。换句话说,在映射之前该列表为空。如果您要从列表映射到字符串,则FirstOrDefault只是一个选项。 - reynoldsbj
谢谢。如果source2有其他属性,可以像这样使用吧?new List<Dest3> { new Dest3 { prop7 = src, prop8=src; } - Glen
1
你的评论让我意识到我的配置少了一部分。已更新答案来修复/回答你的问题。 - reynoldsbj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接