1

我们的代码目前使用非常旧版本的 Automapper (1.1) 到更新的 3.3。自动映射器行为的变化导致了一些问题。

我们有类型的字段,object可以采用引用类型或值的enum值。当字段值是枚举值时,Automapper 会将值映射到字符串表示形式。

请参阅下面的代码示例,它说明了我们的问题 - 有人可以告诉我如何说服 Automapper 将枚举值映射到目标枚举值。

在此先感谢 - 克里斯

    using AutoMapper;
    using AutoMapper.Mappers;
    using NUnit.Framework;

    namespace AutoMapperTest4
    {
        [TestFixture]
        public class AutomapperTest
        {
            [Test]
            public void TestAutomapperMappingFieldsOfTypeEnumObject()
            {
                // Configure 
                var configuration = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers);
                var mapper = new MappingEngine(configuration);
                IMappingExpression<Source, Target> parentMapping = configuration.CreateMap<Source, Target>();
                parentMapping.ForMember(dest => dest.Value, opt => opt.MapFrom(s => ConvertValueToTargetEnumValue(s)));

                var source = new Source { Value = SourceEnumValue.Mule };

                var target = mapper.Map<Target>(source);

                Assert.That(target.Value, Is.TypeOf<TargetEnumValue>()); // Fails.  targetParent.Value is a string "Mule".
            }

            private static TargetEnumValue ConvertValueToTargetEnumValue(Source s)
            {
                return (TargetEnumValue)s.Value;
            }
        }

        public enum SourceEnumValue
        {
            Donkey,
            Mule
        }

        public enum TargetEnumValue
        {
            Donkey,
            Mule
        }

        public class Source
        {
            public object Value { get; set; }
        }

        public class Target
        {
            public object Value { get; set; }
        }
    }
4

1 回答 1

1

您可以在每个 enum 和 之间进行显式映射,并object使用 aConvertUsing(e => e)告诉 AutoMapper 不要弄乱该值。

这行得通,但不得不这样做是很可怕的,而且在某些情况下,很难找到该代码的放置位置。

我很想听听任何可以建议一种方法来恢复“正确”行为的人。

于 2015-05-08T15:41:02.440 回答