自动映射器动态映射无法映射匿名类型的列表



我有以下代码片段。

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

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

看起来动态地图适用于单个项目,但不适用于列表?

files是匿名对象的列表。

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

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

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

动态映射调用为源的类型创建配置 传入到指定目标类型的对象。 如果两种类型 已经被映射了,自动映射器跳过了这一步(我可以调用 本例多次动态映射)。

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

较短的版本:DynamicMap 与调用 CreateMap 然后调用 Map 相同。

一些假人类

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

相关内容

  • 没有找到相关文章

最新更新