Automapper DynamicMap无法映射匿名类型的列表

时间:2013-01-31 16:26:17

标签: c# automapper anonymous-types

我有以下代码段。

var files = query.ToList();
var testFile = Mapper.DynamicMap<EftFileDto>(files.First());
var filesDto = Mapper.DynamicMap<List<EftFileDto>>(files);

testFile具有正确映射的值,但filesDto为空。

看来dynamicMap适用于单个项目,但不适用于列表?

files是一个匿名对象列表。

编辑:如果我使用数组,它也不起作用。我可以让它工作,但是......

        var filesDto = query.Select(Mapper.DynamicMap<EftFileDto>).ToList();

1 个答案:

答案 0 :(得分:7)

  

在大多数映射方案中,我们知道我们要映射到的类型   编译时间。在某些情况下,直到知道源类型   运行时,尤其是在我使用动态类型或在其中的情况下   可扩展性场景。

     

DynamicMap调用为源类型创建配置   对象传入指定的目标类型。如果是两种类型   已经映射,AutoMapper跳过这一步(我可以调用   这个例子的DynamicMap多次)。

来源:http://lostechies.com/jimmybogard/2009/04/15/automapper-feature-interfaces-and-dynamic-mapping/

较短版本: DynamicMap 与调用 CreateMap 然后地图相同。

一些虚拟人类

public class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public int Age { get; set; }
    }

假设你有一份人员名单。

var persons = new List<Person>();
for (int i = 0; i < 100; i++)
{
      persons.Add(new Person { 
                Name = String.Format("John {0}", i), 
                Surname = String.Format("Smith {0}", i), 
                Age = i });
}

然后你选择添加新房产的人。

var anonymousTypes = persons.Select(p => new { 
            p.Name, 
            p.Surname, 
            FullName = String.Format("{0}, {1}", p.Surname,p.Name) }).ToList();

要正确映射第一个人

var testFile = Mapper.DynamicMap<Person>(anonymousTypes.First()); 

要正确映射您将使用的所有人

var testFiles  = anonymousTypes.Select(Mapper.DynamicMap<Person>).ToList();