[英]Map long to enum using automapper
我在使用 automapper 将 long 值转换为 enum 时遇到问题。 如果我什么都不做,我就会得到例外
缺少类型映射配置或不受支持的映射。
映射类型:Int64 -> SomeEnum
所以如果我添加映射配置它就可以工作
public enum B
{
F1,
F2
}
public class A
{
public B FieldB { get; set; }
}
class Program
{
static void Main(string[] args)
{
var autoMapper = new Mapper(new MapperConfiguration(expression =>
{
expression.CreateMap<long, B>()
.ConvertUsing(l => (B)l);
}));
var dictionary = new Dictionary<string, object>()
{
{"FieldB", 1L}
};
var result = autoMapper.Map<A>(dictionary);
}
}
但是我必须为解决方案中的每个枚举定义它,有没有办法定义将 long 转换为 automapper 中的枚举的一般规则?
这似乎是不可能的。 但是您可以使用工厂简化为枚举添加转换的过程:
public class CommonMappingProfile : Profile
{
public CommonMappingProfile()
{
CreateMapLongToEnum<B>();
}
private void CreateMapLongToEnum<T>() where T : Enum
{
CreateMap<long, T>().ConvertUsing(l => (T)Enum.ToObject(typeof(T) , l));
}
}
public class MapperConfigFactory
{
public MapperConfiguration Create(Action<IMapperConfigurationExpression> configExpression = null)
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<CommonMappingProfile>();
configExpression?.Invoke(cfg);
});
return config;
}
}
然后你的代码:
var autoMapperConfigFactory = new MapperConfigFactory();
var autoMapper = new Mapper(autoMapperConfigFactory.Create(cfg =>
{
/* Custom settings if required */
}));
var result = autoMapper.Map<A>(dictionary);
PS:在你有 int size 枚举的例子中,使用 long 类型( doc )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.