【问题标题】:Auto mapper Custom resolver source members to destination object list mapping issueAutomapper 自定义解析器源成员到目标对象列表映射问题
【发布时间】:2020-10-15 17:02:38
【问题描述】:

场景如下:

源对象:

公共类 personSrc
{
    公共字符串名称 {get;放;}
    公共字符串电话{get;放;}
    公共字符串 HomeAddress {get;放;}
    公共字符串 OfficeAddress {get;放;}
}

目标对象:

公开课 personDest
{
    公共字符串名称 {get;放;}
    公共字符串电话{get;放}
    公共列表 地址 {get;放;}
}

公开课地址
{
    公共字符串位置 {get;放;}
    公共地址类型类型 {get;放;}
}
公共枚举地址类型 {办公室,家庭}

所以为了将地址成员从源映射到目标,我制作了这个自定义解析器:

公共类 CustomResolver : IValueResolver>
{
  public List
Resolve(personSrc source, personDest destination, List
destMember, ResolutionContext context) { 列表 结果 = 新列表(); if(!String.IsNullOrEmpty(source.HomeAddress)) { 结果.add(新地址{ 位置 = source.HomeAddress, 类型 = addressType.Home }); } if(!String.IsNullOrEmpty(source.OfficeAddress)) { 结果.add(新地址{ 位置 = source.OfficeAddress, 类型 = addressType.Office }); } 返回结果; } }

我面临的问题是,当我定义我这样编写的探查器时,我似乎无法通过 personSrc 类:

CreateMap()
    .ForMember(dest => dest.name, opt => opt.MapFrom(src => src.name))
    .ForMember(dest => dest.phone, opt => opt.MapFrom(src => src.phone))
    .ForMember(dest => dest.addresses, opt => opt.MapFrom(src => src) // 这行不工作
    .ForMember(dest => dest.addresses, opt => opt.MapFrom() // 这行也不行

很可能我的个人资料没有正确实施,但我似乎找不到正确实施的示例。

【问题讨论】:

    标签: c# .net automapper automapper-9


    【解决方案1】:

    您的个人资料是正确的。我已经尝试了您的示例,并且设法将值映射到您的目标类,并且您的个人资料应如下所示:

    public class CustomProfiler : Profile
      {
        /// <summary>
        /// Initializes a new instance of the <see cref="CustomerProfile"/> class.
        /// </summary>
        public CustomProfiler()
        {
          CreateMap<personSrc, personDest>()
         .ForMember(dest => dest.name, opt => opt.MapFrom(src => src.name))
         .ForMember(dest => dest.phone, opt => opt.MapFrom(src => src.phone))
         .ForMember(dest => dest.addresses, opt => opt.MapFrom<CustomResolver>());
        }
      }
    

    我已经用例子试过了:

    var personSrc = new personSrc { HomeAddress = "HomeAddress", OfficeAddress = "OfficeAddress", name = "name", phone = "phone" };
          var personDest = mapper.Map<personDest>(personSrc);
    

    你在正确的轨道上。你可以试试,让我知道这是否适合你?

    【讨论】:

    • 是的,我为 IValueResolver 创建一个与 Automapper 接口冲突的接口搞砸了
    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 2014-08-05
    • 1970-01-01
    • 2022-01-02
    • 2017-06-19
    • 2016-05-26
    • 1970-01-01
    • 2012-07-18
    相关资源
    最近更新 更多