我们的代码目前使用非常旧版本的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; }
}
}
答案 0 :(得分:1)
您可以在每个枚举和object
之间放置一个显式映射,并使用ConvertUsing(e => e)
告诉AutoMapper不要弄乱该值。
这很有效,但是人们不得不这样做,而且在某些情况下很难找到放置代码的位置。
我非常有兴趣听到任何人可以建议一种方法来取回“正确”行为。