AutoMapper似乎没有映射null可空值。它只会在可空值的情况下映射属性。
如何告诉AutoMapper始终将空值(任何类型)从源映射到目标?
修改
https://github.com/AutoMapper/AutoMapper/blob/master/src/AutoMapper/Mappers/MapperRegistry.cs
AssignableMapper位于NullableMapper之前,如果源为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();
});
我错过了什么吗?
答案 0 :(得分:0)
我相信这不能轻易配置。我试过这个:
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类型映射的异常。