这些是我的课程:
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; }
}
Run Code Online (Sandbox Code Playgroud)
基本上我需要从具有嵌套列表的单个对象到具有嵌套列表和父对象的值的对象列表.可以在AutoMapper中完成吗?我意识到我可以轻松映射事件列表并获取EventDTO对象列表,然后手动设置SystemId和UserId,让AutoMapper为我处理它会非常方便.
Ser*_*kiy 34
您将需要这三个映射与一个自定义转换器:
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
Run Code Online (Sandbox Code Playgroud)
因此,你从配置的映射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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
NBuilder的示例代码:
var log = new EventLog {
SystemId = "Skynet",
UserId = "Lazy",
Events = Builder<Event>.CreateListOfSize(5).Build().ToList()
};
var events = Mapper.Map<IEnumerable<EventDTO>>(log);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22043 次 |
| 最近记录: |