[英]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.