2017-10-13 41 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