2

我正在尝试使用 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,它实质上检索目标中的所有可写属性并检查具有相同名称的相应属性。

在枚举的情况下,有一个名为的字段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 上也报告了问题。

4

1 回答 1

1

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

于 2012-09-24T13:03:51.457 回答