2017-10-13 8 views
5

에 내부 객체 목록에 하나의 객체를지도 나는 다음과 같은 DTO 객체가 결과에는 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>소스 오브젝트 : 단지 목록

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); 

을 이 문제를 해결하려면 Prices에서 RemoteData 대신 PriceDto으로 매핑 한 다음 foreach을 사용하여 Ticker을 할당하십시오. 그러나, 나는 automapper로 그것을하는 방법을 약탈하고 싶다.

+3

가능한 [AutoMapper를 사용하여 한 개체를 개체 목록에 매핑 할 수 있습니까?] (https://stackoverflow.com/questions/18096034/possible-to-use-automapper-to-map-one-object- to-list of objects) – 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