public static void Main()
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<ReadingModel, HistoryCreateModel>()
.ForMember(dest => dest.Value, _ => _.MapFrom<HealthMeasurementValueResolver>())
.ForAllOtherMembers(_ => _.Ignore());
cfg.CreateMap<ReadingModel, HealthDataHistoryPulseCreateModel>()
.IncludeBase<ReadingModel, HistoryCreateModel>()
.ForMember(dest => dest.Value, _ => _.MapFrom(src => (float) src.Pulse));
IMapper mapper = configuration.CreateMapper();
var readingModel = new ReadingModel {
var result = mapper.Map<ReadingModel, HealthDataHistoryPulseCreateModel>(readingModel);
Console.WriteLine(result.Value);
public class HealthMeasurementValueResolver : IValueResolver<ReadingModel, object, float>
public float Resolve(ReadingModel source, object destination, float destMember, ResolutionContext context)
return source.Type switch
"spo2" => (float) source.Spo2,
public class ReadingModel
public string Type { get; set; }
public float? Spo2 { get; set; }
public float? Pulse { get; set; }
public class HistoryCreateModel
public int UserId { get; set; }
public float Value { get; set; }
public class HealthDataHistoryPulseCreateModel : HistoryCreateModel { }