0

我有一组“警报”(列表),我需要将其映射到更复杂类中的属性。我的目标类层次结构如下:

public class BaseReplyDto<T> where T : class, new()
{
    public List<ErrorType> Errors { get; set; }
    public T ReplyData { get; set; }
}


public class GetAllAlertsReplyViewDto : BaseReplyDto<List<Alert>>{}

我的映射器配置是这样的:

Mapper.CreateMap<List<Alert>, GetAllAlertsReplyViewDto>()
.ForMember(dest => dest.Errors, opt => opt.Ignore())
;

当我运行应用程序时,我收到一个映射器验证错误:

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:AutoMapper.AutoMapperConfigurationException:找到未映射的成员。查看下面的类型和成员。

添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型

List`1 -> GetAllAlertsReplyViewDto(目标成员列表)

System.Collections.Generic.List`1[[bioSynq.Infrastructure.Entities.Concrete.Alert, bioSynq.Infrastructure.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> bioSynq.Infrastructure.ViewDtos。 DisplayAlertsArea.GetAllAlertsReplyViewDto(目标成员列表)

回复数据

基本上,它告诉我需要提供一些配置来将我的警报列表映射到作为我的回复数据属性的警报列表中。

我已经使用了大约 20 种不同版本的语法(.ForMember、.ForSourceMember 等),但找不到正确的语法来获得看似非常简单的一个列表到另一个列表的映射。

有人知道这样做的正确语法吗?

4

1 回答 1

0

在您的映射配置中,我没有看到类属性public List<Alert> ReplyData { get; set; }的配置GetAllAlertsReplyViewDto。我的猜测是你需要这样的东西

Mapper.CreateMap<List<Alert>, GetAllAlertsReplyViewDto>()
.ForMember(dest => dest.Errors, opt => opt.Ignore())
.ForMember(dest => dest.ReplyData , opt => opt.MapFrom(list => list));

希望它会有所帮助。

于 2013-11-12T18:50:24.093 回答