我有以下类域和 Dto 类:
public class Profile
{
public string Name { get; set; }
public string SchoolGrade { get; set; }
}
public class ProfileDTO
{
public string Name { get; set; }
public SchoolGradeDTO SchoolGrade { get; set; }
}
public enum SchoolGradeDTO
{
[Display(Name = "Level One"]
LevelOne,
[Display(Name = "Level Two"]
LevelTwo,
}
我使用了以下方法:
Mapper.CreateMap<Profile, ProfileDTO>()
.ForMember(d => d.SchoolGrade , op => op.MapFrom(o => o.SchoolGrade))
之后,我收到以下错误:
未找到请求的值“二级”。
我如何正确映射它?
由于您是从显示名称而不是enumname 您需要构建一个自定义映射函数来扫描属性以查找具有该显示名称的枚举。您可以使用ResolveUsing
代替MapFrom
使用自定义映射函数:
Mapper.CreateMap<Profile, ProfileDTO>()
.ForMember(d => d.SchoolGrade,
op => op.ResolveUsing(o=> MapGrade(o.SchoolGrade)));
public static SchoolGradeDTO MapGrade(string grade)
{
//TODO: function to map a string to a SchoolGradeDTO
}
您可以将名称缓存在静态字典中,这样就不必每次都使用反射。
可以找到一些这样做的方法here https://stackoverflow.com/questions/1187085/string-to-enum-conversion-in-c-sharp.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)