映射后 Automapper 无法识别继承子 类
Automapper does not recognize inheritence sub classes after mapping
我有:
class Pet { string name {get;set;} }
class Dog : Pet { string dograce {get;set;} }
class Cat : Pet { string catrace {get;set;} }
和我的 DTO:
class PetDTO { string name {get;set;} }
class DogDTO : PetDTO{ string dograce {get;set;} }
class CatDTO : PetDTO { string catrace {get;set;} }
现在我的自动映射器设置非常简单:
CreateMap<Pet, PetDTO>();
CreateMap<Dog, DogDTO>();
CreateMap<Cat, CatDTO>();
所以现在我将这些宠物添加到我的收容所中 class:
class Shelter { List<Pet> MyPets {get;set;} }
我的任何 DTO:
class ShelterDTO { List<PetDTO> MyPets {get;set;} }
还有我的自动映射器:
CreateMap<Shelter , ShelterDTO>();
所以我用数据填充它并映射它:
Shelter shel = new Shelter();
shel.MyPets = new List<Pet>();
shel.MyPets.Add(new Dog() { Name = "Fiffy", DogRace = "NiceDog" };
这很好用,现在我想映射它:
var data = mapper.map<ShelpterDTO>(shel);
这就是重点。
在我的“shel”中,宠物是一只狗并且有 属性 DogRace,映射的实例不是狗,它只是一个具有给定名称 Fiffy 但没有 DogRace 的宠物。
我错过了什么类型的配置?
您需要在映射中 Include
(see here) 导出 类,例如:
CreateMap<Dog, DogDTO>();
CreateMap<Cat, CatDTO>();
CreateMap<Pet, PetDTO>()
.Include<Dog, DogDTO>()
.Include<Cat, CatDTO>();
我有:
class Pet { string name {get;set;} }
class Dog : Pet { string dograce {get;set;} }
class Cat : Pet { string catrace {get;set;} }
和我的 DTO:
class PetDTO { string name {get;set;} }
class DogDTO : PetDTO{ string dograce {get;set;} }
class CatDTO : PetDTO { string catrace {get;set;} }
现在我的自动映射器设置非常简单:
CreateMap<Pet, PetDTO>();
CreateMap<Dog, DogDTO>();
CreateMap<Cat, CatDTO>();
所以现在我将这些宠物添加到我的收容所中 class:
class Shelter { List<Pet> MyPets {get;set;} }
我的任何 DTO:
class ShelterDTO { List<PetDTO> MyPets {get;set;} }
还有我的自动映射器:
CreateMap<Shelter , ShelterDTO>();
所以我用数据填充它并映射它:
Shelter shel = new Shelter();
shel.MyPets = new List<Pet>();
shel.MyPets.Add(new Dog() { Name = "Fiffy", DogRace = "NiceDog" };
这很好用,现在我想映射它:
var data = mapper.map<ShelpterDTO>(shel);
这就是重点。 在我的“shel”中,宠物是一只狗并且有 属性 DogRace,映射的实例不是狗,它只是一个具有给定名称 Fiffy 但没有 DogRace 的宠物。
我错过了什么类型的配置?
您需要在映射中 Include
(see here) 导出 类,例如:
CreateMap<Dog, DogDTO>();
CreateMap<Cat, CatDTO>();
CreateMap<Pet, PetDTO>()
.Include<Dog, DogDTO>()
.Include<Cat, CatDTO>();