Automapper无法在IEnumerable上映射

我有两个类如下所示:

public class SentEmailAttachment : ISentEmailAttachment { public SentEmailAttachment(); public string FileName { get; set; } public string ID { get; set; } public string SentEmailID { get; set; } public string StorageService { get; set; } public string StorageServiceFileID { get; set; } } 

 public class SentEmailAttachmentItem : ISentEmailAttachment { [ItemName] public string ID { get; set; } public string SentEmailID { get; set; } public string FileName { get; set; } public string StorageService { get; set; } public string StorageServiceFileID { get; set; } } 

相同的,你可以看到(他们都实现接口来确保这一点)

然后我有以下映射:

 Mapper.CreateMap<IEnumerable<SentEmailAttachmentItem>, IEnumerable<SentEmailAttachment>>(); Mapper.CreateMap<IEnumerable<SentEmailAttachment>, IEnumerable<SentEmailAttachmentItem>>(); 

然后我有以下unit testing:

 //create a load of sent email attachments var listOfSentEmailAttachments = new List<SentEmailAttachment>(); for (int i = 0; i < 10; i++) listOfSentEmailAttachments.Add(new SentEmailAttachment { FileName = "testFileName", ID = Guid.NewGuid().ToString(), SentEmailID = Guid.NewGuid().ToString(), StorageService = "S3", StorageServiceFileID = "SomeFileID" }); var sentEmailAttachmentItems = Mapper.DynamicMap<IEnumerable<SentEmailAttachment>, IEnumerable<SentEmailAttachmentItem>>(listOfSentEmailAttachments); var itemToTest = sentEmailAttachmentItems.First(); Assert.IsInstanceOfType(itemToTest, typeof(SentEmailAttachmentItem)); 

这失败 – IEnumerable sentEmailAttachmentItems是空的。 它没有将SentEmailAttachments的列表映射到它…

任何想法是怎么回事?

我有它的工作单个对象(映射到每个之一),但不是一个集合…

您不需要显式映射集合types,只需要项目types。 做就是了:

 Mapper.CreateMap<SentEmailAttachment, SentEmailAttachmentItem>(); var attachments = Mapper.Map<IEnumerable<SentEmailAttachment>, List<SentEmailAttachmentItem>>(someList); 

这将工作得很好。

编辑 :我发现一个简单的方法来使用DynamicMap的集合。

 IEnumerable<FakeItem> unmappedItems = Repository.GetItems(); IEnumerable<MappedItem> mappedItems = unmappedItems.Select(Mapper.DynamicMap<MappedItem>); 

– 原始信息 –

Jimmy说要使用它的方式很有效,但是我尽量使用DynamicMap来避免为每个需要的映射执行“CreateMap”。 如果有的话,我认为DynamicMap不能很好地处理集合。 它不会抛出exception,但结果是一个空集。

从过去几天的testing,你不能在这个时候使用DynamicMap的集合(我知道)。