AutoMapper 4.2.0现在支持动态/扩展/字典映射
使用此功能,您可以将 expando 对象映射到静态类型:
dynamic CurUser = _users.GetSingleUser(UserID);
var config = new MapperConfiguration(cfg => { });
var mapper = config.CreateMapper();
var retUser = mapper.Map<UserModel>(CurUser);
旧版本的 AutoMapper 不支持这一点(大量内部使用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);