gpt4 book ai didi

c# - 使用 AutoMapper 将字符串映射到枚举

转载 作者:可可西里 更新时间:2023-11-01 08:04:43 29 4
gpt4 key购买 nike

我有以下类域和 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))

之后,我收到以下错误:

Requested value 'Level Two' was not found.

如何正确映射它?

最佳答案

由于您是从显示名称 而不是枚举 名称进行映射,因此您需要构建一个自定义映射函数来扫描属性以查找枚举显示名称。您可以使用 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 .

关于c# - 使用 AutoMapper 将字符串映射到枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857515/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com