首页 > 代码库 > AutoMapper中用户自定义转换
AutoMapper中用户自定义转换
Custom Type Converters
Sometimes, you need to take complete control over the conversion of one type to another. This is typically when one type looks nothing like the other, a conversion function already exists, and you would like to go from a "looser" type to a stronger type, such as a source type of string to a destination type of Int32.For example, suppose we have a source type of:
public class Source{ public string Value1 { get; set; } public string Value2 { get; set; } public string Value3 { get; set; }}
But you would like to map it to:
public class Destination{ public int Value1 { get; set; } public DateTime Value2 { get; set; } public Type Value3 { get; set; }}
If we were to try and map these two types as-is, AutoMapper would throw an exception (at map time and configuration-checking time), as AutoMapper does not know about any mapping from string to int, DateTime or Type. To create maps for these types, we must supply a custom type converter, and we have three ways of doing so:
void ConvertUsing(Func<TSource, TDestination> mappingFunction);void ConvertUsing(ITypeConverter<TSource, TDestination> converter);void ConvertUsing<TTypeConverter>() where TTypeConverter : ITypeConverter<TSource, TDestination>;
public interface ITypeConverter<TSource, TDestination>{ TDestination Convert(TSource source);}
And supply AutoMapper with either an instance of a custom type converter, or simply the type, which AutoMapper will instantiate at run time. The mapping configuration for our above source/destination types then becomes:
[Test]public void Example(){ Mapper.CreateMap<string, int>().ConvertUsing(Convert.ToInt32); Mapper.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter()); Mapper.CreateMap<string, Type>().ConvertUsing<TypeTypeConverter>(); Mapper.CreateMap<Source, Destination>(); Mapper.AssertConfigurationIsValid(); var source = new Source { Value1 = "5", Value2 = "01/01/2000", Value3 = "AutoMapperSamples.GlobalTypeConverters.GlobalTypeConverters+Destination" }; Destination result = Mapper.Map<Source, Destination>(source); result.Value3.ShouldEqual(typeof (Destination));}public class DateTimeTypeConverter : ITypeConverter<string, DateTime>{ public DateTime Convert(string source) { return System.Convert.ToDateTime(source); }}public class TypeTypeConverter : ITypeConverter<string, Type>{ public Type Convert(string source) { Type type = Assembly.GetExecutingAssembly().GetType(source); return type; }}
AutoMapper中用户自定义转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。