我正在尝试使用AutoMapper来映射一个非常简单的枚举。
此映射存在的原因是PriorityType位于我的服务器上运行的dotnet 4.0域模型程序集中,但我需要在我的DataContract程序集中使用dotnet 3.5中的Dto。
public enum PriorityType// : byte
{
Low = 0,
Medium,
High,
Urgent
}
[Serializable]
public enum PriorityTypeDto// : byte
{
Low = 0,
Medium,
High,
Urgent
}
Mapper.CreateMap<PriorityType, PriorityTypeDto>();
如果我取消注释byte
父类型(我真的不需要超过255个可能的条目!),我会得到一个TypeInitializationException
。无法使用ConvertUsing解决它。
为什么围绕byte
打嗝?
修改1
进一步调试AutoMapper,它实质上检索目标中的所有可写属性,并检查具有相同名称的相应属性。
对于Enums,有一个名为value__
的字段,可以通过AutoMapper尝试映射的反射显示。
错误与v2.2不同(在2.1上),但是在映射字节枚举时仍然会抛出异常,但在映射int32的枚举时却很好。
此处发生错误,
public delegate object LateBoundFieldGet(object target);
Expression<LateBoundFieldGet> lambda =
Expression.Lambda<LateBoundFieldGet>(
Expression.Convert(member, typeof(object)),
instanceParameter);
return lambda.Compile();
lambda.Compile()
会引发InvalidProgramException
。
仍在努力理解原因。
修改2
在AutoMapper GitHub上也报告了问题。
答案 0 :(得分:1)
您不需要CreateMap调用 - AutoMapper自动处理枚举类型而无需任何配置。只需删除CreateMap即可进行设置。