Хорошо, я нашел решение! IMemberValueResolver - это то, что мне нужно.
public class Source
{
public string Text { get; set; }
public string TextTime { get; set; }
}
public class Destination
{
public string Message { get; set; }
public DateTime? CreatedOn { get; set; }
}
public class DateTimeResolver : IMemberValueResolver<object, object, object, object>
{
private readonly string _format;
public DateTimeResolver(string format)
{
_format = format;
}
public object Resolve(object source, object destination, object sourceMember, object destMember, ResolutionContext context)
{
DateTime dt;
return DateTime.TryParseExact(sourceMember.ToString(), _format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt) ? dt : (DateTime?) null;
}
}
private static void Main(string[] args)
{
Source src = new Source()
{
Text = " message with spaces ",
TextTime = "04/22/1988"
};
DateTimeResolver dtReader = new DateTimeResolver("MM/dd/yyyy");
Mapper.Initialize(cfg =>
cfg.CreateMap(typeof (Source), typeof (Destination))
// type resolver
.ForMember("Message", opt => opt.ResolveUsing<TrimResolver, object>("Text"))
// instance resolver
.ForMember("CreatedOn", opt => opt.ResolveUsing(dtReader, "TextTime")));
Destination dst = Mapper.Map<Destination>(src);
}
}
пользовательский вариант «ITypeConverter» может быть? –