public static void Main()
MapperConfiguration config = new MapperConfiguration(ctx => {
.ForMember(dest => dest.BoolValue, op => op.MapFrom<CustomValueResolver<bool?>>())
.ForMember(dest => dest.DateTimeValue, op => op.MapFrom<CustomValueResolver<DateTime?>>())
.ForMember(dest => dest.IntValue, op => op.MapFrom<CustomValueResolver<int?>>())
.ForAllOtherMembers(dest => dest.Ignore());
IMapper mapper = config.CreateMapper();
X src = new X { Value = "1" };
Y dest = mapper.Map<Y>(src);
Console.WriteLine(JsonConvert.SerializeObject(dest));
X src2 = new X { Value = "false" };
Y dest2 = mapper.Map<Y>(src2);
Console.WriteLine(JsonConvert.SerializeObject(dest2));
X src3 = new X { Value = "2022-07-05T12:00:00Z" };
Y dest3 = mapper.Map<Y>(src3);
Console.WriteLine(JsonConvert.SerializeObject(dest3));
public class CustomValueResolver<T> : IValueResolver<X, Y, T?>
public T? Resolve(X source, Y destination, T? member, ResolutionContext context)
Type type = Nullable.GetUnderlyingType(typeof(T));
T? safeValue = source.Value != null
? (T?)Convert.ChangeType(source.Value, type)
public string Value {get; set;}
public bool? BoolValue {get; set;}
public DateTime? DateTimeValue {get; set;}
public int? IntValue {get; set;}