AutoMapper Enum Byte Typeinitializationexception

时间:2012-09-21 15:33:53

标签: c# automapper typeinitializeexception

我正在尝试使用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上也报告了问题。

1 个答案:

答案 0 :(得分:1)

您不需要CreateMap调用 - AutoMapper自动处理枚举类型而无需任何配置。只需删除CreateMap即可进行设置。