繁体   English   中英

AutoMapper 不能使用转换器 map 可空值

[英]AutoMapper can't map nullable values with a converter

我有以下两个 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; }
}

在我的应用程序中,我想实现标准行为,即 null 的值在映射它们时不会覆盖它们的目标。 这是我试图执行的代码:

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

直接在转换器上指定Nullable ( ? ):

public class NullableConverter<TSource> : ITypeConverter<TSource?, TSource?> where TSource: struct
{
    public TSource? Convert(TSource? source, TSource? destination, ResolutionContext context)
    {
        return source.HasValue ? source : destination ;
    }
}

此外,如果您想忽略所有 null 源成员,您可以这样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM