Automapper SetValue 基于 属性 名称
Automapper SetValue based on Property Name
正在尝试使用 AutoMapper 根据 属性 名称设置 属性 值...
DTO ...
/// <summary>
/// DTO for the Performance Overview Report
/// </summary>
public class PerformanceOverviewDto
{
public OverviewDto Summary1 { get; set; }
public OverviewDto Summary2 { get; set; }
}
/// <summary>
/// DTO for the WorkIn Overview
/// </summary>
public class OverviewDto : MetricOverviewDto
{
/// <summary>
/// Total Hours for the Period
/// </summary>
public Decimal? TotalHours { get; set; }
/// <summary>
/// Average Hours per working day
/// </summary>
public string AvgHoursPerWorkingDay { get; set; }
}
单位是我的 ViewModel 中用于标记的额外 属性
public class MetricsOverviewModel
{
public MetricSummaryModel Summary1 { get; set; }
public MetricSummaryModel Summary2 { get; set; }
}
public class MetricSummaryModel
{
public string MinForPeriod { get; set; }
public string MaxForPeriod { get; set; }
public string Units { get; set; }
public decimal TotalHours { get; set; }
public string AvgHoursPerWorkingDay { get; set; }
public IEnumerable<MetricSeriesOverviewDto> AllValuesPerTimePeriod { get; set; }
}
对于"Summary2" ..我想覆盖单位的默认值..
public class WebAutoMapperProfile : Profile
{
protected override void Configure()
{
CreateMap<OverviewDto, MetricSummaryModel>()
.ForMember(prop => prop.Units, opt => opt.UseValue(Strings.HoursinShort));
CreateMap<PerformanceOverviewDto, MetricsOverviewModel>()
.ForMember(prop => prop.Summary1.Units, opt => opt.UseValue(Strings.PercentSymbol));
}
}
我越来越...
表达式 'prop => prop.Summary1.Units' 必须解析为顶级成员,而不是任何子对象的属性。在子类型或 AfterMap 选项上使用自定义解析器。
提前致谢!
基思.
查看 DTO 的代码会很有帮助,但我猜您需要以下内容:
CreateMap<OverviewDto, MetricSummaryModel>()
.ForMember(prop => prop.Units, opt => opt.UseValue(Strings.HoursinShort));
CreateMap<PerformanceOverviewDto, MetricsOverviewModel>()
.AfterMap((src, dest) => dest.Summary1.Units = Strings.PercentSymbol);
基本上,如果您从 PerformanceOverviewDto
映射 --> MetricsOverviewModelthis
,这将使用第一个 CreateMap
从 OverviewDto
映射到 MetricSummary
,但随后它使用 AfterMap
用 Strings.PercentSymbol
覆盖 Strings.HoursinShort
。
正在尝试使用 AutoMapper 根据 属性 名称设置 属性 值...
DTO ...
/// <summary>
/// DTO for the Performance Overview Report
/// </summary>
public class PerformanceOverviewDto
{
public OverviewDto Summary1 { get; set; }
public OverviewDto Summary2 { get; set; }
}
/// <summary>
/// DTO for the WorkIn Overview
/// </summary>
public class OverviewDto : MetricOverviewDto
{
/// <summary>
/// Total Hours for the Period
/// </summary>
public Decimal? TotalHours { get; set; }
/// <summary>
/// Average Hours per working day
/// </summary>
public string AvgHoursPerWorkingDay { get; set; }
}
单位是我的 ViewModel 中用于标记的额外 属性
public class MetricsOverviewModel
{
public MetricSummaryModel Summary1 { get; set; }
public MetricSummaryModel Summary2 { get; set; }
}
public class MetricSummaryModel
{
public string MinForPeriod { get; set; }
public string MaxForPeriod { get; set; }
public string Units { get; set; }
public decimal TotalHours { get; set; }
public string AvgHoursPerWorkingDay { get; set; }
public IEnumerable<MetricSeriesOverviewDto> AllValuesPerTimePeriod { get; set; }
}
对于"Summary2" ..我想覆盖单位的默认值..
public class WebAutoMapperProfile : Profile
{
protected override void Configure()
{
CreateMap<OverviewDto, MetricSummaryModel>()
.ForMember(prop => prop.Units, opt => opt.UseValue(Strings.HoursinShort));
CreateMap<PerformanceOverviewDto, MetricsOverviewModel>()
.ForMember(prop => prop.Summary1.Units, opt => opt.UseValue(Strings.PercentSymbol));
}
}
我越来越... 表达式 'prop => prop.Summary1.Units' 必须解析为顶级成员,而不是任何子对象的属性。在子类型或 AfterMap 选项上使用自定义解析器。
提前致谢! 基思.
查看 DTO 的代码会很有帮助,但我猜您需要以下内容:
CreateMap<OverviewDto, MetricSummaryModel>()
.ForMember(prop => prop.Units, opt => opt.UseValue(Strings.HoursinShort));
CreateMap<PerformanceOverviewDto, MetricsOverviewModel>()
.AfterMap((src, dest) => dest.Summary1.Units = Strings.PercentSymbol);
基本上,如果您从 PerformanceOverviewDto
映射 --> MetricsOverviewModelthis
,这将使用第一个 CreateMap
从 OverviewDto
映射到 MetricSummary
,但随后它使用 AfterMap
用 Strings.PercentSymbol
覆盖 Strings.HoursinShort
。