首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以使用AutoMapper将一个对象映射到对象列表吗?

可以使用AutoMapper将一个对象映射到对象列表吗?
EN

Stack Overflow用户
提问于 2013-08-07 14:22:15
回答 1查看 34.4K关注 0票数 35

以下是我的类:

代码语言:javascript
复制
public class EventLog {
        public string SystemId { get; set; }
        public string UserId { get; set; }
        public List<Event> Events { get; set; }
}

public class Event {
        public string EventId { get; set; }
        public string Message { get; set; }
}

public class EventDTO {
        public string SystemId { get; set; }
        public string UserId { get; set; }
        public string EventId { get; set; }
        public string Message { get; set; }
}

基本上,我需要从具有嵌套列表的单个对象转到具有来自嵌套列表和父对象的值的对象列表。这可以在AutoMapper中完成吗?我意识到我可以很容易地映射Events列表并获得EventDTO对象的列表,然后手动设置SystemId和UserId,让AutoMapper为我处理它会非常方便。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-07 15:12:53

通过一个自定义转换器,您将需要这三个映射:

代码语言:javascript
复制
Mapper.CreateMap<Event, EventDTO>(); // maps message and event id
Mapper.CreateMap<EventLog, EventDTO>(); // maps system id and user id
Mapper.CreateMap<EventLog, IEnumerable<EventDTO>>()
      .ConvertUsing<EventLogConverter>(); // creates collection of dto

因此,您配置了从EventEventDTO以及从EventLogEventDTO的映射,您可以在自定义转换器中使用这两种映射:

代码语言:javascript
复制
class EventLogConverter : ITypeConverter<EventLog, IEnumerable<EventDTO>>
{
    public IEnumerable<EventDTO> Convert(ResolutionContext context)
    {
        EventLog log = (EventLog)context.SourceValue;
        foreach (var dto in log.Events.Select(e => Mapper.Map<EventDTO>(e)))
        {
            Mapper.Map(log, dto); // map system id and user id
            yield return dto;
        }
    }
}

使用NBuilder编写的示例代码

代码语言:javascript
复制
var log = new EventLog {
    SystemId = "Skynet",
    UserId = "Lazy",
    Events = Builder<Event>.CreateListOfSize(5).Build().ToList()
};

var events = Mapper.Map<IEnumerable<EventDTO>>(log);
票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18096034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档