Я хотел бы знать, существует ли правильный подход к объектам карты, содержащим свойства типа Queue<T>
.
Отображение работает для Queue<int> Log
свойств в обоих классах.Но для Queue<PositionDto> PositionLog
в классе TargetDto
количество элементов всегда равно 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);
}
}
В случае, если у нас есть PositionLog
свойства типа List<Position>
и List<PositionDto>
сопоставление работает правильно.Если мы изменим тип свойства PositionLog
в классе TargetDto
на тип Queue<Position>
, то это также будет работать.
Я использую AutoMapper версии 8.1.1 и .NET Core 2.2