如何停止自动应用程序将枚举值转换为字符串



我们的代码当前使用非常旧的AutoMapper(1.1)的版本到最近的3.3。汽车行为的变化导致了一些问题。

我们有类型object的字段,该字段可能是参考类型或enum值的值。当字段值为枚举值时,然后自动应用程序将值映射到字符串表示。

请参阅下面的代码示例,该示例说明了我们的问题 - 请有人告诉我如何说服自动应用程序将枚举值映射到目标枚举值。

预先感谢-Chris

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

您可以在每个枚举和object之间进行明确的映射,并使用ConvertUsing(e => e)来告诉AutoMapper不要弄乱该值。

这起作用,但要做到这一点真是太恐怖了,在某些情况下,很难找到将代码放在哪里。

我很想听听任何可以提出一种方法来获得"正确"行为的人。

相关内容

  • 没有找到相关文章

最新更新