AutoMapper を使用して非常に単純な Enum をマップしようとしています。
このマッピングが存在する理由は、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 をさらにデバッグすると、基本的に、宛先内のすべての書き込み可能なプロパティを取得し、同じ名前の対応するプロパティをチェックします。
Enum の場合、AutoMapper がvalue__
マップしようとするリフレクションで表示されるという名前のフィールドがあります。
エラーは 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でも報告された問題。