以下是我的类:
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为我处理它会非常方便。
发布于 2013-08-07 15:12:53
通过一个自定义转换器,您将需要这三个映射:
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
因此,您配置了从Event
到EventDTO
以及从EventLog
到EventDTO
的映射,您可以在自定义转换器中使用这两种映射:
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编写的示例代码
var log = new EventLog {
SystemId = "Skynet",
UserId = "Lazy",
Events = Builder<Event>.CreateListOfSize(5).Build().ToList()
};
var events = Mapper.Map<IEnumerable<EventDTO>>(log);
https://stackoverflow.com/questions/18096034
复制相似问题