È ansible utilizzare AutoMapper per mappare un object nell’elenco di oggetti?

Queste sono le mie classi:

public class EventLog { public string SystemId { get; set; } public string UserId { get; set; } public List 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; } } 

Fondamentalmente ho bisogno di passare da un singolo object, con un elenco annidato, ad un elenco di oggetti con valori dall’elenco annidato e dall’object genitore. Questo può essere fatto in AutoMapper? Mi rendo conto che posso facilmente mappare la lista degli eventi e ottenere un elenco di oggetti EventDTO e quindi impostare manualmente SystemId e UserId, sarebbe semplicemente molto comodo lasciare che AutoMapper gestisca per me.

Avrai bisogno di queste tre mappe con un convertitore personalizzato:

 Mapper.CreateMap(); // maps message and event id Mapper.CreateMap(); // maps system id and user id Mapper.CreateMap>() .ConvertUsing(); // creates collection of dto 

Così hai configurato i mapping da Event a EventDTO e da EventLog a EventDTO puoi usarli entrambi nel convertitore personalizzato:

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

Codice di esempio con NBuilder :

 var log = new EventLog { SystemId = "Skynet", UserId = "Lazy", Events = Builder.CreateListOfSize(5).Build().ToList() }; var events = Mapper.Map>(log);