コード:automapperで「タイプマップ設定が見つからないか、サポートされていないマッピングが見つかりません」というエラーが表示されるのはなぜですか?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AutoMapper;
namespace TestAutomapper
{
class Program
{
static void Main(string[] args)
{
var config = new MapperConfiguration(cfg => cfg.CreateMap<MyClassSource, MyClassDestination>());
var mapper = config.CreateMapper();
var source = new MyClassSource { DateTimeValue = null };
var mapped = mapper.Map<MyClassSource, MyClassDestination>(source);
}
}
public class MyClassSource
{
public object DateTimeValue { get; set; }
}
public class MyClassDestination
{
public DateTime? DateTimeValue { get; set; }
}
}
エラーは次のとおりです。
AutoMapper.AutoMapperMappingException was unhandled
HResult=-2146233088
Message=Error mapping types.
Mapping types:
MyClassSource -> MyClassDestination
TestAutomapper.MyClassSource -> TestAutomapper.MyClassDestination
Type Map configuration:
MyClassSource -> MyClassDestination
TestAutomapper.MyClassSource -> TestAutomapper.MyClassDestination
Property:
DateTimeValue
Source=Anonymously Hosted DynamicMethods Assembly
StackTrace:
at lambda_method(Closure , MyClassSource , MyClassDestination , ResolutionContext)
at TestAutomapper.Program.Main(String[] args) in C:\Users\costa\documents\visual studio 2015\Projects\TestAutomapper\TestAutomapper\Program.cs:line 22
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
HResult=-2146233088
Message=Missing type map configuration or unsupported mapping.
Mapping types:
Object -> Nullable`1
System.Object -> System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Source=Anonymously Hosted DynamicMethods Assembly
StackTrace:
at lambda_method(Closure , Object , Nullable`1 , ResolutionContext)
at lambda_method(Closure , MyClassSource , MyClassDestination , ResolutionContext)
InnerException:
私は(https://github.com/AutoMapper/AutoMapper/issues/1095)このエラーが解決したと思いました。私はAutomapper 5.1.1を使用しています。
これを修正するにはどうすればよいですか?
おかげ
編集:だけを明確にするには、私は、NULL値の取り扱いと心配です。私は非nullオブジェクト値からDateTimeへの変換が複雑であることを理解しています。実際のコードでは、ソースオブジェクトの実際の値はnullまたはDateTimeです。私はnullがエラーなしで処理されると思った。
編集:
私が今までにオブジェクトを変換するために、拡張メソッドのToDateを作成したと私はオブジェクトからのDateTimeに変換を処理するために、このマッピングを追加した?:あなたのソース内のプロパティとして
cfg.CreateMap<object, DateTime?>().ConstructUsing(src => src.ToDate());
私はAutoMapperを使っていたのでしばらくしていましたが、同じプロパティ名を異なるタイプで自動的にマップするには、2つのタイプ(例えば、 'object'と' DateTime? ')の間のマップが必要です。ですから、 'object'と' DateTime? '(これは気になるようです)の間のマッピングを追加するか、カスタム解像度オプションを使用してください。 –