AutoMapper 4.2.0 теперь поддерживает Динамическое / расширение / отображение словаря
С помощью этой функции вы можете отобразить ваши объекты расширения настатические типы:
dynamic CurUser = _users.GetSingleUser(UserID);
var config = new MapperConfiguration(cfg => { });
var mapper = config.CreateMapper();
var retUser = mapper.Map<UserModel>(CurUser);
Старые версии AutoMapper не поддерживают это (Massive внутренне использует ExpandoObject
, который не предоставляет какие свойства он имеет), и вы правы Mapper.DynamicMap
для отображения без созданиякартографическая конфигурация.
На самом деле не сложно написать себе маппер, если вы просто хотите простое картирование:
public static class DynamicToStatic
{
public static T ToStatic<T>(object expando)
{
var entity = Activator.CreateInstance<T>();
//ExpandoObject implements dictionary
var properties = expando as IDictionary<string, object>;
if (properties == null)
return entity;
foreach (var entry in properties)
{
var propertyInfo = entity.GetType().GetProperty(entry.Key);
if(propertyInfo!=null)
propertyInfo.SetValue(entity, entry.Value, null);
}
return entity;
}
}
dynamic CurUser = _users.GetSingleUser(UserID);
var retUser = DynamicToStatic.ToStatic<UserModel>(CurUser);