繁体   English   中英

AutoMapper - Map 源列表到目标数组

[英]AutoMapper - Map source list to a destination array

我正在尝试使用 AutoMapper 将源列表 map 到目标数组。

源类

public class ReservationSource
{
    public Travel TravelSource { get; set; }

    public string SeqNo { get; set; }
}

public class Travel
{
    public string TravelId { get; set; }

    public ICollection<Trip> Trips { get; set; }
}

public class Trip
{
    public string  TrainNumber { get; set; }
    public string  Arrival { get; set; }
}

目的地等级

public class ReservationDestination 
{
    public Route[] TravelDest { get; set; }
    public string SeqNumber { get; set; }
}

public class Route
{
    public string SequNumber { get; set; }
    public string RouteId { get; set; }
}

private static route[] GetRoutes(ICollection<Trip> trips)
{
    List<route> routeList = new List<route>();

    foreach (var trip trips)
    {
        var route = new route
        {
            SequNumber = trip.trainNumber

        };
        routeList.Add(route);
    }
    return routeList.ToArray();
}

Map配置

cfg.CreateMap<ReservationSource, ReservationDestination>()

var config = new MapperConfiguration(cfg =>
{
    cfg.AllowNullDestinationValues = true;
    cfg.CreateMap<ReservationSource, ReservationDestination>()
        .ForMember(dest => dest.SeqNumber, o => o.MapFrom(src => SeqNo))
        .ForPath(dest => dest.TravelDest, o => o.MapFrom(src => GetRoutes(src)));
});

这是我尝试过的,在这里我想消除GetRoutes方法,我将使用foreach循环手动执行 map。 是否可以在没有循环的情况下使用任何其他方式?

TripRoute类添加映射。

cfg.CreateMap<Trip, Route>()
    .ForMember(dest => dest.SequNumber, o => o.MapFrom(src => src.TrainNumber));

完整的映射配置

var config = new MapperConfiguration(cfg =>
{       
    cfg.CreateMap<Trip, Route>()
        .ForMember(dest => dest.SequNumber, o => o.MapFrom(src => src.TrainNumber));
            
    cfg.AllowNullDestinationValues = true;
    cfg.CreateMap<ReservationSource, ReservationDestination>()
        .ForMember(dest => dest.SeqNumber, o => o.MapFrom(src => src.SeqNo))
        .ForPath(dest => dest.TravelDest, o => o.MapFrom(src => src.TravelSource.Trips));
});

IMapper mapper = config.CreateMapper();
        
var source = new ReservationSource
{
    SeqNo = "Seq001",
    TravelSource = new Travel
    {
        TravelId = "1",
        Trips = new List<Trip>
        {
            new Trip { TrainNumber = "A0001" },
            new Trip { TrainNumber = "B0001" }
        }
    }
};
        
var destination = mapper.Map<ReservationSource, ReservationDestination>(source);
Console.WriteLine(JsonConvert.SerializeObject(destination));

示例程序

Output

{"TravelDest":[{"SequNumber":"A0001","RouteId":null},{"SequNumber":"B0001","RouteId":null}],"SeqNumber":"Seq001"}

参考

列表和 Arrays - AutoMapper 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM