2017-10-13 19 views
5

Tôi có sau dto đối tượng:Automapper: Bản đồ đối tượng duy nhất với danh sách các đối tượng bên trong để chỉ danh sách

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

Đối tượng nguồn:

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

Trong kết quả, tôi muốn để có được bộ sưu tập của PriceDto đối tượng. Tôi biết cách lập bản đồ thuộc tính Ticker. Nhưng, tôi không có ý tưởng làm thế nào để lập bản đồ Prices một cách chính xác:

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

Ngoài ra, Automapper không thể tìm thấy cấu hình bởi vì tôi có đơn RemoteData, nhưng tôi muốn để có được IList<PriceDto>:

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

Đối với workaround, tôi đã tạo bản đồ từ Prices đến PriceDto thay vì RemoteData và sau đó chỉ cần sử dụng foreach để gán Ticker. Nhưng, tôi muốn thực hiện và làm thế nào để làm điều đó với automapper.

+3

Bản sao có thể có của [Có thể sử dụng AutoMapper để ánh xạ một đối tượng vào danh sách đối tượng?] (Https://stackoverflow.com/questions/18096034/possible-to-use-automapper-to-map-one-object- to-list-of-objects) – Rhumborl

Trả lời

2

Cách tiếp cận tốt cho trường hợp này là sử dụng .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() 
        ); 
      }); 
... 

Để biết thêm thông tin read about custom type converters.

Tôi hy vọng điều đó sẽ hữu ích.

+0

Vâng, có lẽ công cụ chuyển đổi tùy chỉnh là tốt nhất cho công việc này. Cảm ơn bạn. – user348173

Các vấn đề liên quan