AutoMapper отображает недопустимые типы значений

Похоже, что AutoMapper не отображает пустые значения. Он отобразит свойства только в том случае, если значение обнуляется.

Как мне сказать AutoMapper всегда отображать нулевые значения (любого типа) из источника в место назначения?

РЕДАКТИРОВАТЬ:

https://github.com/AutoMapper/AutoMapper/blob/master/src/AutoMapper/Mappers/MapperRegistry.cs

AssignableMapper находится перед NullableMapper, который предотвращает сопоставление обнуляемых типов, если источник является нулевым.

Я добавил этот фрагмент кода, чтобы вставить 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 ответ

Я считаю, что это не так легко настроить. Я попробовал это:

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

И не это помогло мне. Он по-прежнему генерирует исключения неправильного отображения с нулевым типом, когда просто должен отобразить нулевое значение в свойстве.

Другие вопросы по тегам