将字符串映射到同名的对象中
我在两个对象之间进行映射,源包含两个名为Animal
和AnimalColor
字符串,例如Animal = "Cat"
和AnimalColor = "White"
。 目的地包含一个属性Animal
,它是一个包含两个字符串类型Pet
的类, 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()
用于简单地选择映射的源属性。 它基本上告诉AutoMapper“我希望你把这个属性名称映射到这个属性名称,但是使用你在配置中的类型映射映射这些类型。
它被记录为投影。
你所要做的就是所谓的自定义值分辨率。 使用像这样的ResolveUsing
方法(简单地替换MapFrom
):
.ForMember(dest => dest.Animal, opt => opt.ResolveUsing(src => new Pet() { Type = src.Animal, Color = src.AnimalColor }));
ResolveUsing
字面返回返回的任何函数,并将其分配给目标属性,而不尝试执行任何其他映射。
你也可以创建一个ValueResolver
类并像这样使用它:
.ForMember(dest => dest.Animal, opt => opt.ResolveUsing<PetResolver>());
链接地址: http://www.djcxy.com/p/37375.html
上一篇: mapping strings into object of same name
下一篇: AutoMapper map object to Lookup field in MS Dynamics CRM