Проблема, с которой вы столкнулись, заключается в том, что AutoMapper пытается сопоставить содержимое словаря. Вы должны подумать, что это за магазин - в данном случае KeyValuePairs .
Если вы попытаетесь создать сопоставитель для комбинации KeyValuePair, вы быстро обнаружите, что не можете напрямую, так как свойство Key не имеет установщика .
AutoMapper справляется с этим, позволяя вам наносить на карту конструктор.
/* Create the map for the base object - be explicit for good readability */
Mapper.CreateMap<TestClass, TestClassDto>()
.ForMember( x => x.Name, o => o.MapFrom( y => y.Name ) );
/* Create the map using construct using rather than ForMember */
Mapper.CreateMap<KeyValuePair<string, TestClass>, KeyValuePair<string, TestClassDto>>()
.ConstructUsing( x => new KeyValuePair<string, TestClassDto>( x.Key,
x.Value.MapTo<TestClassDto>() ) );
var testDict = new Dictionary<string, TestClass>();
var testValue = new TestClass()
{
Name = "value1"
};
testDict.Add( "key1", testValue );
/* Mapped Dict will have your new KeyValuePair in there */
var mappedDict = Mapper.Map<Dictionary<string, TestClass>,
Dictionary<string, TestClassDto>>( testDict );