簡體   English   中英

如何通過AutoMapper實現具有通用Queue類型屬性的對象的映射

[英]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屬性的類型TargetDtoQueue<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM