У меня есть следующие два объекта POCO:
private class Person
{
public string Name { get; set; }
public int? Age { get; set; }
}
private class PersonDto
{
public string Name { get; set; }
public int? Age { get; set; }
}
В моем приложении я хочу реализовать стандартное поведение, при котором значения с нулевым значением не перезаписывают свои цели при их сопоставлении. Это код, который я пытался выполнить:
var mapper = new MapperConfiguration(m =>
{
m.CreateMap<Person, PersonDto>().ReverseMap();
m.CreateMap(typeof(Nullable<>), typeof(Nullable<>)).ConvertUsing(typeof(NullableConverter<>));
}).CreateMapper();
var person = new Person
{
Name = "Steve",
Age = null
};
var personDto = new PersonDto
{
Name = "Steve",
Age = 20
};
var result = mapper.Map(person, personDto);
Console.WriteLine(personDto.Age);
Я ожидал, что в сообщении Console.WriteLine(personDto.Age);
будет напечатано 20
. NullableConverter
реализуется следующим образом:
public class NullableConverter<TSource> : ITypeConverter<TSource, TSource>
{
public TSource Convert(TSource source, TSource destination, ResolutionContext context)
{
return source == null ? destination : source;
}
}
Вместо этого меня приветствует следующее исключение в отношении отображения свойства Age
: System.InvalidCastException: Unable to cast object of type 'Test.NullableConverter´1[System.Int32]' to type 'AutoMapper.ITypeConverter´2[System.Nullable´1[System.Int32],System.Nullable´1[System.Int32]]'
. Для меня это не имеет смысла. Почему AutoMapper пытается присвоить NullableConverter<int>
ITypeConverter<int?, int?>
. Очевидно, что это не сработает. Разве не следует пытаться использовать NullableConverter<int?>
? Это похоже на ошибочное поведение. Я что-то упустил?
Я использую AutoMapper v10