我有以下 dto 对象:
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
属性(property)。但是,我不知道如何映射 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);
为了解决这个问题,我从 Prices
创建了 map 至 PriceDto
而不是 RemoteData
然后使用 foreach
分配 Ticker
.但是,我想了解如何使用自动映射器进行操作。
最佳答案
对于这种情况,一个好的方法是使用 .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()
);
});
...
关于c# - Automapper:将带有内部对象列表的单个对象映射到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46725911/