[英]How to implement mapping of objects with properties of generic Queue type via AutoMapper
我想知道是否有一种正确的方法来映射包含Queue<T>
类型的属性的对象。
在两个类中,映射均适用于Queue<int> Log
属性。 但是对于TargetDto
类中的Queue<PositionDto> PositionLog
,映射后项目数始终为0。
这是一个简化的代码来演示:
class Program
{
public class Target
{
public int Id { get; set; }
public Queue<int> Log { get; set; }
public Queue<Position> PositionLog { get; set; }
}
public class TargetDto
{
public int Id { get; set; }
public Queue<int> Log { get; set; }
public Queue<PositionDto> PositionLog { get; set; }
}
public class Position{ }
public class PositionDto{ }
static void Main(string[] args)
{
var configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Target, TargetDto>()
.ForMember(dest => dest.PositionLog, opt => opt.MapFrom(src => src.PositionLog));
cfg.CreateMap<Position, PositionDto>();
cfg.CreateMap<Queue<Position>, Queue<PositionDto>>();
});
configuration.AssertConfigurationIsValid();
var mapper = configuration.CreateMapper();
var target1 = new Target() {Id = 0};
target1.Log = new Queue<int>();
target1.Log.Enqueue(1);
target1.Log.Enqueue(2);
target1.Log.Enqueue(3);
target1.PositionLog = new Queue<Position>();
var p1 = new Position();
var p2 = new Position();
target1.PositionLog.Enqueue(p1);
target1.PositionLog.Enqueue(p2);
var targetDto = mapper.Map<TargetDto>(target1);
}
}
如果我们具有List<Position>
类型的PositionLog
属性,并且List<PositionDto>
映射正常工作。 如果我们将TargetDto
类中的PositionLog
属性的类型TargetDto
为Queue<Position>
类型,则它也可以正常工作。
我使用版本8.1.1和.NET Core 2.2的AutoMapper
AM并非特殊情况, Queue<T>
, List<T>
是默认的集合类型。 但是您可以使用ICollection<PositionDto>
。 然后你只需要
cfg.CreateMap<Target, TargetDto>();
cfg.CreateMap<Position, PositionDto>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.