Я пытаюсь построить способ отображения от одного типа к другому, зная, что они будут (должны) иметь ту же структуру. Смежный вопрос .
Для простоты использования я использую AutoMapper из Codeplex со следующей функцией:
private static List<Type> seenTypes = new List<Type>();
private static void MapDataObjects(Type a, Type b)
{
AutoMapper.Mapper.CreateMap(a, b);
PropertyInfo[] aProps = a.GetProperties();
PropertyInfo[] bProps = b.GetProperties();
foreach (PropertyInfo aProp in aProps)
{
if (aProp.PropertyType.Namespace.StartsWith("System")
|| seenTypes.Contains(aProp.PropertyType))
continue;
foreach (PropertyInfo bProp in bProps)
{
if (aProp.Name == bProp.Name)
{
MapDataObjects(aProp.PropertyType, bProp.PropertyType);
seenTypes.Add(aProp.PropertyType);
break;
}
}
}
}
Что, кажется, работает нормально при пошаговом выполнении кода, однако при вызове моей функции Map появляется следующая ошибка:
AutoMapper.AutoMapperMappingException:
Trying to map TDXDataTypes.ClientActivity[] to ClientActivity[].
Using mapping configuration for TDXDataTypes.ClientActivity[] to ClientActivity[]
Destination property: Activities
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
---> System.ArgumentException:
Type 'ClientActivity[]' does not have a default constructor