繁体   English   中英

AutoMapper 将 map Object 放入对象列表

[英]AutoMapper to map Object into List of Objects

我想要 map 和 object 的 PersonDetails class 到详细信息列表 object。PersonDetails class 是

public class PersonDetails
             {
               public PersonItems PersonItems{get;set;}
               public int CreatedBy {get;set;}
               public string PersonCode {get;set;}
             }
public class PersonItems
             {
              public string ItemCode {get; set;}
              public List<string> ItemColors {get;set;}
              public string ItemName {get; set;}
             }

对于每个 ItemColor 尝试 map 这到以下列表 object class:

public class Seller{
             public string SellerCode {get;set;}
             public Details details {get; set;}
             }
public class Details
             {
              public string ItemCode {get; set;}
              public string ItemColor {get;set;}
              public string ItemName {get; set;}
              public string PersonCode {get;set}
             }`

我通过在服务 class 中对 ItemColors 应用循环来尝试以下代码,调用 automapper。

List<Details> detailsList = new();
foreach( string ItemColor in PersonDetails.PersonItems.ItemColor){
Details details = _mapper.Map<PersonDetails>( details) ;
details.Add(details);
}

我创建了一个单独的映射器 class 来注册映射器方法。

public void RegisterPersonDetailstoDetailsObjectList(){
     CreateMap<PersonDetails,Details>()
     .ForMember(d => d.details.PersonCode, src=> src.MapFrom(src => src.PersonCode
     .ForMember(d => d.PersonItems, src => src.MapFrom( s => new Details
        {
            ItemCode = s.PersonItems.ItemCode,
            **ItemColor = s.PersonItems.ItemColor,**
            ItemName = s.PersonItems.ItemName
        }
}));
}

无法弄清楚以粗体文本从循环中获取每个 ItemColor 并传递给此自动映射器方法。 基本上我想遍历 itemColor 并将其分配给映射的每个 ListOf object。

根据我对你的问题的理解,你似乎 map 从PersonDetails object 到List<Details>列表。

以下映射需要自定义类型转换器

public void RegisterPersonDetailstoDetailsObjectList()
{
     CreateMap<PersonDetails, Details>()
        .ForMember(d => d.PersonCode, src=> src.MapFrom(src => src.PersonCode))
        .ForMember(d => d.ItemCode, src => src.MapFrom(src => src.PersonItems.ItemCode))
        .ForMember(d => d.ItemName, src => src.MapFrom(src => src.PersonItems.ItemName));

     CreateMap<PersonDetails, List<Details>>()
        .ConvertUsing((src, dest, ctx) =>
        {
            dest = new List<Details>();

            foreach (string itemColor in src.PersonItems.ItemColors)
            {
                var details = ctx.Mapper.Map<Details>(src);
                details.ItemColor = itemColor;

                dest.Add(details);
            }

            return dest;
        });
}

演示 @ .NET Fiddle

暂无
暂无

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

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