2017-10-13 8 views
5

をリストに内部のオブジェクトのリストを単一のオブジェクトの地図た結果でAutomapper:</p> <pre><code>public class PriceDto { public string Ticker {get; set;} public double Open {get; set;} public double Close {get; set;} } </code></pre> <p>ソースオブジェクト::私はDTOオブジェクトには、次のしているだけで

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をマッピングするためには考えている:私は、単一のRemoteDataを持っているので、また

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

は、Automapper設定を見つけることができませんが、私はIList<PriceDto>取得したい:については

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

を回避策として、RemoteDataの代わりにPricesからPriceDtoへのマップを作成した後、foreachを使用してTickerを割り当ててください。しかし、私はオートマッペでそれをどうやって行うのかを考えたい。

+3

[AutoMapperを使用して1つのオブジェクトをオブジェクトのリストにマップすることは可能ですか?](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

関連する問題

 関連する問題