gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:19:07 26 4
gpt4 key购买 nike

这些是我的类(class):

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 中完成吗?我意识到我可以轻松映射事件列表并获取 EventDTO 对象列表,然后手动设置 SystemId 和 UserId,让 AutoMapper 为我处理它会非常方便。

最佳答案

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

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 的映射,您可以同时使用它们在自定义转换器中:

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);

关于c# - 可以使用 AutoMapper 将一个对象映射到对象列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18096034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com