AutoMapper声明了类型映射

时间:2011-01-18 00:39:44

标签: .net automapper

我想使用AutoMapper来实现“声明类型”映射(一般来说 - 我不想为每种类型手动配置它)

所以,如果我有:

public class Animal 
{ 
   int NumberOfLegs { get; set; }
}

public class Cat : Animal
{ 
   string FurColor { get; set; }
}

我有一个我要映射到Animal的Cat实例...我想最终得到一个Animal实例,而不是Cat。我希望将相同的语义应用于对象图的其余部分(使用相关实体和实体集合)。

除了猫和狗......基本上,我有DataContracts的子类(不是DataContracts本身),我想把它放回到DataContracts的实例中。

有关如何执行此操作的任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

听起来有点像你想要回滚到基类,但你不仅仅想要一个引用,而是一个基类的实例。如果你想一般性地这样做,我猜你可以使用一些反射来获得Animal的所有子类,并将该类型映射回Animal。像这样:

var currentAssem = Assembly.GetExecutingAssembly();
var animals = currentAssem.GetTypes().Where(t => t.IsSubclassOf(typeof(Animal)));
foreach(var animalType in animals)
{
    Mapper.CreateMap(animalType, typeof (Animal));
}

现在您可以将任何动物子类映射回Animal

var cat = new Cat { NumberOfLegs = 4, FurColor = "blue" };
var dog = new Dog { NumberOfLegs = 4, WoofType = "squeek" };

var animal1 = Mapper.Map<Cat, Animal>(cat);
var animal2 = Mapper.Map<Dog, Animal>(dog);