C# 自动映射可空值类型

C# 自动映射可空值类型,c#,.net,automapper,C#,.net,Automapper,AutoMapper似乎不映射空的可空值。仅当可为null的值为空时,它才会映射属性 如何告诉AutoMapper始终将空值(任何类型)从源映射到目标 编辑: AssignableMapper位于NullableMapper之前,如果源为null,则会阻止映射可为null的类型 我添加了这段代码,以便在一开始就插入NullableMapper container.RegisterSingle(() => { // we need t

AutoMapper似乎不映射空的可空值。仅当可为null的值为空时,它才会映射属性

如何告诉AutoMapper始终将空值(任何类型)从源映射到目标

编辑:

AssignableMapper位于NullableMapper之前,如果源为null,则会阻止映射可为null的类型

我添加了这段代码,以便在一开始就插入NullableMapper

container.RegisterSingle(() =>
            {
                // we need to add a nullable mapper to ensure Nullable<value> gets mapped correctly
                var mappers = AutoMapper.Mappers.MapperRegistry.AllMappers().ToList();
                mappers.Insert(0, new AutoMapper.Mappers.NullableMapper());
                return mappers.AsEnumerable();
            });
container.RegisterSingle(()=>
{
//我们需要添加一个可空映射器,以确保正确映射可空映射
var mappers=AutoMapper.mappers.MapperRegistry.AllMappers().ToList();
Insert(0,新的AutoMapper.mappers.NullableMapper());
返回mappers.AsEnumerable();
});

我遗漏了什么吗?

我相信这不能这么容易配置。我试过这个:

var r = (IObjectMapper[])typeof(MappingEngine).GetField("_mappers", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(((MappingEngine)(AutoMapper.Mapper.Engine)));

Array.Resize(ref r, r.Length + 1);
Array.Copy(r, 0, r, 1, r.Length - 1);
r[0] = new NullableMapper();

typeof(MappingEngine).GetField("_mappers", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(((MappingEngine)(AutoMapper.Mapper.Engine)), r);
即使这样:

MapperRegistry.AllMappers = () => new IObjectMapper[]
{
    new NullableMapper(),
    new TypeMapMapper(TypeMapObjectMapperRegistry.AllMappers()),
    new StringMapper(),
    new FlagsEnumMapper(),
    new AssignableMapper(),
    new EnumMapper(),
    new PrimitiveArrayMapper(),
    new ArrayMapper(),
    new EnumerableToDictionaryMapper(),
    new DictionaryMapper(),
    new ReadOnlyCollectionMapper(),
    new CollectionMapper(),
    new EnumerableMapper(),
    new NullableSourceMapper(),
    new ImplicitConversionOperatorMapper(),
    new ExplicitConversionOperatorMapper(),
};

这对我很有帮助。当它只应该将null映射到属性时,它仍然抛出错误的null类型映射异常。

您使用的是什么版本?您可以在NuGet上查看最新的预发布版本吗?