我们的代码当前使用非常旧的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不要弄乱该值。
这起作用,但要做到这一点真是太恐怖了,在某些情况下,很难找到将代码放在哪里。
我很想听听任何可以提出一种方法来获得"正确"行为的人。