为 Dynamic/Expando 个对象配置 AutoMapper 映射
Configuring AutoMapper Maps for Dynamic/Expando Object
我正在使用 AutoMapper 将 ExpandoObjects 映射到一个实体,并想为映射配置一些规则,具体来说,我不想映射到任何从实体继承的 属性;我试图在这些属性上设置忽略,但它从不为顶级对象执行,我为从实体字符串 => 实体继承的实体属性设置了断点,但从不为 ExpandoObject => 实体设置断点。
Startup.cs
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(config =>
{
config.ForAllMaps((cfg, expr) =>
{
if (typeof(Entity).IsAssignableFrom(cfg.DestinationType))
{
var properties = cfg.DestinationType.GetProperties()
.Where(prop => typeof(Entity).IsAssignableFrom(prop.PropertyType));
foreach (var prop in properties)
{
expr.ForMember(prop.Name, opt => opt.Ignore());
}
}
});
config.CreateMissingTypeMaps = true;
config.ValidateInlineMaps = false;
});
我找到了一些有效的代码,但我希望找到一种非全局的方法。
.AddAutoMapper(config =>
{
config.ShouldMapProperty = pi => !typeof(Entity).IsAssignableFrom(pi.PropertyType);
config.CreateMissingTypeMaps = true;
config.ValidateInlineMaps = false;
});
有没有办法为 ExpandoObjects 配置地图?该文档显示了如何映射它们,但没有关于为它们配置映射的任何信息...
不,来自 ExpandoObject
的映射是内置的,不像您自己创建的常规地图那样工作。而且没有办法配置它。
Here是代码。
我正在使用 AutoMapper 将 ExpandoObjects 映射到一个实体,并想为映射配置一些规则,具体来说,我不想映射到任何从实体继承的 属性;我试图在这些属性上设置忽略,但它从不为顶级对象执行,我为从实体字符串 => 实体继承的实体属性设置了断点,但从不为 ExpandoObject => 实体设置断点。
Startup.cs
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(config =>
{
config.ForAllMaps((cfg, expr) =>
{
if (typeof(Entity).IsAssignableFrom(cfg.DestinationType))
{
var properties = cfg.DestinationType.GetProperties()
.Where(prop => typeof(Entity).IsAssignableFrom(prop.PropertyType));
foreach (var prop in properties)
{
expr.ForMember(prop.Name, opt => opt.Ignore());
}
}
});
config.CreateMissingTypeMaps = true;
config.ValidateInlineMaps = false;
});
我找到了一些有效的代码,但我希望找到一种非全局的方法。
.AddAutoMapper(config =>
{
config.ShouldMapProperty = pi => !typeof(Entity).IsAssignableFrom(pi.PropertyType);
config.CreateMissingTypeMaps = true;
config.ValidateInlineMaps = false;
});
有没有办法为 ExpandoObjects 配置地图?该文档显示了如何映射它们,但没有关于为它们配置映射的任何信息...
不,来自 ExpandoObject
的映射是内置的,不像您自己创建的常规地图那样工作。而且没有办法配置它。
Here是代码。