我正在使用Automapper从包含许多本地“StringType”和“DateTimeType”字段的对象映射到我想要自动化的标准System.string,System.DateTime。有没有办法在不必在源对象上注册每个成员的情况下执行此操作?
我正在尝试做这样的事情:
Mapper.CreateMap<StringType, string>()
.ForAllMembers(q =>
{
q.NullSubstitute(string.Empty);
q.MapFrom(p => p.Value);
});
Mapper.CreateMap<DateTimeType, DateTime>()
.ForAllMembers(q =>
{
q.NullSubstitute(DateTime.MinValue);
q.MapFrom(p => p.Value);
});
Mapper.CreateMap<InType, OutType>();
当我尝试从“InType”到“OutType”进行实际转换时,我一直得到“source object is null”异常。我已经尝试通过ValueResolvers定义转换,但这没有帮助。
这样做的正确方法是什么? (我在stackoverflow上看过类似的问题,但我看到的答案都提到了配置步骤和/或下载另一个库来处理这种情况:在所有这些情况下我自己的解决方案是转储Automapper并使用手写转换,节省时间并使代码更易于阅读。)
答案 0 :(得分:2)
你看过自定义类型转换器了吗?
我认为应该这样做......
这个链接不是那么“年轻”,但几周前我看了它,它仍然很有用
http://lostechies.com/jimmybogard/2009/05/06/automapper-feature-custom-type-converters/
你会有类似的东西(未经测试)
public class StringTypeToStringResolver : ITypeConverter<StringType, string> {
public string Convert(StringType source) {
return source == null ? string.Empty : source.Value;
}
}
和像这样的映射声明
Mapper.CreateMap<StringType, string>().ConvertUsing(new StringTypeToStringResolver());
Mapper.CreateMap<InType, OutType>();