2017-10-13 24 views
5

与对象的名单单个对象,我有以下DTO对象:Automapper:地图里面只列出

public class PriceDto 
{ 
    public string Ticker {get; set;} 
    public double Open {get; set;} 
    public double Close {get; set;} 
} 

源对象:

public class RemoteData 
{ 
    public Security Security { get; set; } 
    public IList<Prices> Prices{ get; set; } 
} 

public class Security 
{ 
    public string Ticker {get; set;} 
} 

public class Prices 
{ 
    public double Open {get; set;} 
    public double Close {get; set;} 
} 

在结果,我想要得到的集合PriceDto对象。我知道如何映射Ticker属性。但是,我不知道如何正确地映射Prices

CreateMap<RemoteData, PriceDto>() 
    .ForMember(d => d.Ticker, opt => opt.MapFrom(s => s.Security.Ticker)); 

此外,Automapper找不到配置,因为我有一个RemoteData,但我想IList<PriceDto>

var json = await rangeUrl.GetJsonAsync<RemoteData>(); 
var dtos = _mapper.Map<IList<PriceDto>>(json); 

对于解决方法,我创建的地图,从PricesPriceDto而不是RemoteData,然后只用foreach分配Ticker。但是,我想要了解如何使用automapper完成它。

+3

的可能的复制[可以使用AutoMapper映射一个对象的对象列表?](https://stackoverflow.com/questions/18096034/possible-to-use-automapper-to-map-one-object-到-的对象列表) – Rhumborl

回答

2

一个好的方法对于这种情况是使用.ConvertUsing

... 
      Mapper.Initialize(cfg => 
      { 
       cfg.CreateMap<RemoteData, List<PriceDto>>() 
        .ConvertUsing(source => source.Prices?.Select(p => new PriceDto 
         { 
          Ticker = source.Security?.Ticker, 
          Open = p.Open, 
          Close = p.Close 
         }).ToList() 
        ); 
      }); 
... 

欲了解更多信息read about custom type converters

我希望它有帮助。

+0

呀,大概自定义转换器是最适合这个任务。谢谢。 – user348173