AutoMapper映射无效值类型

时间:2013-01-31 16:55:48

标签: c# .net automapper

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();
            });

我错过了什么吗?

1 个答案:

答案 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类型映射的异常。