AutoMapper - 将字符串映射到同名对象
AutoMapper - mapping strings into object of same name
我在两个对象之间进行映射,源包含两个名为 Animal
和 AnimalColor
的字符串,例如 Animal = "Cat"
和 AnimalColor = "White"
。目标包含一个 属性 Animal
,它是一个类型为 Pet
的 class,它包含两个字符串,Type
和 Color
因此我的映射器配置中有以下内容:
cfg.CreateMap<SrcPetStore, DestPetStore>()
.ForMember(dest => dest.Animal, opt => opt.MapFrom(src => new Pet() { Type = src.Animal, Color = src.AnimalColor }));
当我 运行 这样做时,我收到 AutoMapperMappingException
抱怨 Missing type map configuration or unsupported mapping
映射
String -> Pet
这就像它试图从源 Animal
(字符串)映射目标 Animal
(宠物对象)而不考虑自定义 ForMember 配置
如果我添加一个未使用的映射 cfg.CreateMap<string, Pet>()
一切正常,但应该没有必要,因为该映射从未使用过(并且没有意义)
这是在 AutoMapper 5.0 中。
MapFrom()
用于简单地select源属性进行映射。它基本上是在告诉 AutoMapper“我想让你把这个 属性 name 映射到这个 属性 name,但是映射使用您配置中的类型映射的类型。
记录为Projection。
您正在尝试做的事情被称为 Custom value resolution。像这样使用 ResolveUsing
方法(只需替换 MapFrom
):
.ForMember(dest => dest.Animal, opt => opt.ResolveUsing(src => new Pet() { Type = src.Animal, Color = src.AnimalColor }));
ResolveUsing
字面上 returns 无论你的函数 returns 并将其分配给目的地 属性,而不尝试做任何额外的映射。
您还可以创建一个 ValueResolver
class 并像这样使用它:
.ForMember(dest => dest.Animal, opt => opt.ResolveUsing<PetResolver>());
我在两个对象之间进行映射,源包含两个名为 Animal
和 AnimalColor
的字符串,例如 Animal = "Cat"
和 AnimalColor = "White"
。目标包含一个 属性 Animal
,它是一个类型为 Pet
的 class,它包含两个字符串,Type
和 Color
因此我的映射器配置中有以下内容:
cfg.CreateMap<SrcPetStore, DestPetStore>()
.ForMember(dest => dest.Animal, opt => opt.MapFrom(src => new Pet() { Type = src.Animal, Color = src.AnimalColor }));
当我 运行 这样做时,我收到 AutoMapperMappingException
抱怨 Missing type map configuration or unsupported mapping
映射
String -> Pet
这就像它试图从源 Animal
(字符串)映射目标 Animal
(宠物对象)而不考虑自定义 ForMember 配置
如果我添加一个未使用的映射 cfg.CreateMap<string, Pet>()
一切正常,但应该没有必要,因为该映射从未使用过(并且没有意义)
这是在 AutoMapper 5.0 中。
MapFrom()
用于简单地select源属性进行映射。它基本上是在告诉 AutoMapper“我想让你把这个 属性 name 映射到这个 属性 name,但是映射使用您配置中的类型映射的类型。
记录为Projection。
您正在尝试做的事情被称为 Custom value resolution。像这样使用 ResolveUsing
方法(只需替换 MapFrom
):
.ForMember(dest => dest.Animal, opt => opt.ResolveUsing(src => new Pet() { Type = src.Animal, Color = src.AnimalColor }));
ResolveUsing
字面上 returns 无论你的函数 returns 并将其分配给目的地 属性,而不尝试做任何额外的映射。
您还可以创建一个 ValueResolver
class 并像这样使用它:
.ForMember(dest => dest.Animal, opt => opt.ResolveUsing<PetResolver>());