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