[英]AutoMapper - Map from object to enum
I have this class:我有这个 class:
public class EntityClass
{
public bool IsExempt { get; set; }
public bool IsOverdue { get; set; }
public SourceEnum Status { get; set; }
}
And these two enums:这两个枚举:
public enum SourceEnum
{
NotSet = 0,
InProgress,
Submitted,
AssessmentComplete,
Complete
}
[Flags]
public enum DestinationEnum
{
None = 0,
[Description("Exempt")]
Exempt = 1,
[Description("Unset")]
Unset = 2,
[Description("Overdue")]
Overdue = 3,
[Description("In Progress")]
InProgress = 4,
[Description("Submitted")]
Submitted = 5,
[Description("Conf. Pending")]
ConfirmationPending = 6,
[Description("Complete")]
Completed = 7
}
I want to map from EntityClass
to DestinationEnum
, I tried it this way:我想 map 从
EntityClass
到DestinationEnum
,我是这样尝试的:
var config = new MapperConfiguration(cfg => cfg.CreateMap<EntityClass, DestinationEnum>()
.ForMember(dest => dest, opt => opt.MapFrom(source => source.IsExempt ? DestinationEnum.Exempt : DestinationEnum.None))
.ForMember(dest => dest, opt => opt.MapFrom(source => source.IsOverdue ? DestinationEnum.Overdue : DestinationEnum.None))
.ForMember(dest => dest, opt => opt.MapFrom(source => source.Status == SourceEnum.InProgress ? DestinationEnum.InProgress : DestinationEnum.None))
.ForMember(dest => dest, opt => opt.MapFrom(source => source.Status == SourceEnum.Complete ? DestinationEnum.Completed : DestinationEnum.None))
.ForMember(dest => dest, opt => opt.MapFrom(source => source.Status == SourceEnum.AssessmentComplete ? DestinationEnum.ConfirmationPending : DestinationEnum.None))
.ForMember(dest => dest, opt => opt.MapFrom(source => source.Status == SourceEnum.Submitted ? DestinationEnum.Submitted : DestinationEnum.None))
.ForMember(dest => dest, opt => opt.MapFrom(source => source.Status == SourceEnum.NotSet ? DestinationEnum.Unset : DestinationEnum.None)));
var mapper = config.CreateMapper();
var entityClassObj = new EntityClass { IsExempt = true, IsOverdue = true, Status = SourceEnum.InProgress };
var result = mapper.Map<DestinationEnum>(entityClassObj);
When I run my code, it returns:当我运行我的代码时,它返回:
Custom configuration for members is only supported for top-level individual members on a type.
成员的自定义配置仅支持类型上的顶级个人成员。
I tried the solution from here but unfortunately the IncludeMembers
method is not available.我从这里尝试了解决方案,但不幸的是
IncludeMembers
方法不可用。 I am using AutoMapper 6.0.2.我正在使用 AutoMapper 6.0.2。
As @Lucian mentioned, you need to implement the Custom Type Converter for your scenario.正如@Lucian 提到的,您需要为您的场景实现自定义类型转换器。
Solution 1解决方案 1
public class EntityClassToDestinationEnumConverter : ITypeConverter<EntityClass, DestinationEnum>
{
public DestinationEnum Convert(EntityClass src, DestinationEnum dest, ResolutionContext context)
{
if (src.IsExempt)
return DestinationEnum.Exempt;
if (src.IsOverdue)
return DestinationEnum.Overdue;
switch (src.Status)
{
case SourceEnum.InProgress:
return DestinationEnum.InProgress;
case SourceEnum.Complete:
return DestinationEnum.Completed;
case SourceEnum.AssessmentComplete:
return DestinationEnum.ConfirmationPending;
case SourceEnum.Submitted:
return DestinationEnum.Submitted;
case SourceEnum.NotSet:
return DestinationEnum.Unset;
}
return DestinationEnum.None;
}
}
Your Mapping Profile or MapperConfiguration
to map from EntityClass
to DestinationEnum
.您的映射配置文件或
MapperConfiguration
到 map 从EntityClass
到DestinationEnum
。
MapperConfiguration _config = new MapperConfiguration(config =>
{
config.CreateMap<EntityClass, DestinationEnum>()
.ConvertUsing<EntityClassToDestinationEnumConverter>();
});
Solution 2解决方案 2
Or writing a method for the logic without a custom type resolver class .或者为没有自定义类型解析器 class的逻辑编写方法。
public static class Helpers
{
public static DestinationEnum ConvertFromEntityClassToDestinationEnum(EntityClass src)
{
if (src.IsExempt)
return DestinationEnum.Exempt;
if (src.IsOverdue)
return DestinationEnum.Overdue;
switch (src.Status)
{
case SourceEnum.InProgress:
return DestinationEnum.InProgress;
case SourceEnum.Complete:
return DestinationEnum.Completed;
case SourceEnum.AssessmentComplete:
return DestinationEnum.ConfirmationPending;
case SourceEnum.Submitted:
return DestinationEnum.Submitted;
case SourceEnum.NotSet:
return DestinationEnum.Unset;
}
return DestinationEnum.None;
}
}
MapperConfiguration _config = new MapperConfiguration(config =>
{
config.CreateMap<EntityClass, DestinationEnum>()
.ConvertUsing(src => Helpers.ConvertFromEntityClassToDestinationEnum(src));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.