我想使用AutoMapper来实现“声明类型”映射(一般来说 - 我不想为每种类型手动配置它)
所以,如果我有:
public class Animal
{
int NumberOfLegs { get; set; }
}
public class Cat : Animal
{
string FurColor { get; set; }
}
我有一个我要映射到Animal的Cat实例...我想最终得到一个Animal实例,而不是Cat。我希望将相同的语义应用于对象图的其余部分(使用相关实体和实体集合)。
除了猫和狗......基本上,我有DataContracts的子类(不是DataContracts本身),我想把它放回到DataContracts的实例中。
有关如何执行此操作的任何建议吗?
谢谢!
答案 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);