Вы можете использовать AutoMapper Пользовательские преобразователи типов .
AutoMapper не знает ни о каком сопоставлении от строки до int, например, поэтому для создания карт для этих типов мы должны предоставить специальный преобразователь типов. Это может быть достигнуто с помощью метода ConvertUsing()
.
Mapper.Initialize(configuration =>
{
configuration.CreateMap<string, int>().ConvertUsing(s => Convert.ToInt32(s));
configuration.CreateMap<string, DateTime>().ConvertUsing(s => new DateTimeTypeConverter().Convert(s));
configuration.CreateMap<string, bool>().ConvertUsing(s => Convert.ToBoolean(s));
configuration.CreateMap<string, decimal>().ConvertUsing(s => Convert.ToDecimal(s));
configuration.CreateMap<SourceModel, DestinationModel>()
.ForMember("_CUSTOM_Mynumber", opt => opt.MapFrom(src => src.CustomFieldValues.FirstOrDefault(x => x.Name == "_CUSTOM_Mynumber").Value));
});
В приведенном выше примере показано, как мы можем конвертировать int
, bool
и decimal
. Для DateTime
мы будем использовать ITypeConverter
.
public interface ITypeConverter<in TSource, TDestination>
{
TDestination Convert(TSource source);
}
Затем определите пользовательское преобразование:
public class DateTimeTypeConverter : ITypeConverter<string, DateTime>
{
public DateTime Convert(source)
{
return Convert.ToDateTime(source);
}
}