1

场景如下:

源对象:

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

目标对象:

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

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

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

公共类 CustomResolver : IValueResolver<personSrc, personDest, List<address>>
{
  public List<address> Resolve(personSrc source, personDest destination, List<address> 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<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>(src => src) // 这行不工作
    .ForMember(dest => dest.addresses, opt => opt.MapFrom<customResolver>() // 这行也不行

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

4

1 回答 1

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);

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

于 2020-06-25T09:45:13.617 回答