将问题从简单列表映射到ViewDto中的相应属性

时间:2013-11-10 23:35:43

标签: collections automapper

我有一个“警报”(List)的集合,我需要映射到更复杂的类中的属性。 我的目标类层次结构如下:

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配置如下:

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

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

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

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

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

列表`1 - &gt; GetAllAlertsReplyViewDto(目标成员列表)

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

ReplyData

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

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

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

1 个答案:

答案 0 :(得分: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));

希望它会有所帮助。