国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

AutoMapper搬運(yùn)工之自定義類型轉(zhuǎn)換

2019-11-17 02:48:40
字體:
供稿:網(wǎng)友

AutoMapper搬運(yùn)工之自定義類型轉(zhuǎn)換

前言

最近還挺忙,還有點(diǎn)累,一直都沒更新了,實(shí)在是懶呀。正題之前先說點(diǎn)別的,最近公司要擴(kuò)張了,需要大量開發(fā),領(lǐng)導(dǎo)說推薦有錢可以拿,如此好機(jī)會,我就趁機(jī)做個廣告。ShippingRen.com招募.NET高級開發(fā),坐標(biāo)上海,有興趣的給我留言,或者加我QQ:1029183866,加的時候請說明博客園看到。

另外在說說這幾天,工作忙是不可避免,業(yè)余也在準(zhǔn)備自己的網(wǎng)站www.capqueen.com(目前還在備案中),準(zhǔn)備用目前會的技術(shù)從無到有建立一個CMS(博客),到時候也會發(fā)一些文章和大家分享。最近還有一個想法,因?yàn)楣ぷ鞯年P(guān)系用了很多框架和組件,大多數(shù)是github上的,我在考慮我研究過了之后稍微有些心得,是不是再搬運(yùn)來和大家分享。目前在看的有FluentValidation和ServiceStack。

好了回歸正題,這篇文章我會和大家分享關(guān)于AutoMapper的自定義轉(zhuǎn)換規(guī)則。相信大家如果有在用的話,一定會遇到目標(biāo)對象和源對象屬性名字對應(yīng)但是類型不對應(yīng),該如何解決呢?。

自定義類型轉(zhuǎn)換規(guī)則(Custom type converters)

還是照樣上場景,首先有以下兩個類:

    public class Source    {        public string Value1 { get; set; }        public string Value2 { get; set; }        public string Value3 { get; set; }    }    public class Destination    {        public int Value1 { get; set; }        public DateTime Value2 { get; set; }        public Type Value3 { get; set; }    }

上面的類如果按照普通的轉(zhuǎn)換的話,顯然要報錯,錯誤如下:

    AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.//AutoMapper Mapping異常,找不到相應(yīng)的類型配置或者不支持的Mapping

因此我們需要給Mapping指定相應(yīng)的類型轉(zhuǎn)換,AutoMapper提供了3種方式:

void ConvertUsing(Func<TSource, TDestination> mappingFunction);void ConvertUsing(ITypeConverter<TSource, TDestination> converter);void ConvertUsing<TTypeConverter>() where TTypeConverter : ITypeConverter<TSource, TDestination>;

首先看第一種

Mapper.CreateMap<string, int>().ConvertUsing(System.Convert.ToInt32);

這種很簡單,直接指定了一個方法,這里是使用了System.Convert里的默認(rèn)轉(zhuǎn)換,當(dāng)然咱們也可以自定義只要是一個Func<TSource, TDestination>就可以了。

再來看剩下兩種,這兩種使用了接口ITypeConverter<in TSource, out TDestination>, 這個接口是AutoMapper提供的用于自定義的類型轉(zhuǎn)換的實(shí)現(xiàn)。咱們看看實(shí)現(xiàn),如下:

    public class DateTimeTypeConverter : ITypeConverter<string, DateTime>    {        public DateTime Convert(ResolutionContext context)        {            return System.Convert.ToDateTime(context.SourceValue);//使用了默認(rèn)的Convert,這里注意這個context是上下文,附帶了轉(zhuǎn)換時的參數(shù)信息        }    }    public class TypeTypeConverter : ITypeConverter<string, Type>    {        public Type Convert(ResolutionContext context)        {            return context.SourceType;//使用源屬性的類型        }    }

然后再來看看使用方法:

    Mapper.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter());    Mapper.CreateMap<string, Type>().ConvertUsing<TypeTypeConverter>();    

總結(jié)

自定義類型轉(zhuǎn)換的好處在于,我們只要定義一次就可以在所有轉(zhuǎn)換里都可以使用。但是我想,會不會存在一些情況,例如TypeA => TypeB 我們有多種轉(zhuǎn)換需求?這樣的場景,看起來AutoMapper無法采用自定義類型轉(zhuǎn)換了。不知道有沒有哪位知道如何處理的,請留言~

其實(shí)在我看來很多時候直接用自定義映射就已經(jīng)可以解決掉了上面的問題,類型轉(zhuǎn)換只是AutoMapper提供的一種遍歷,感覺也說不上特別需要。

本篇文章搬運(yùn)自:https://github.com/AutoMapper/AutoMapper/wiki/Custom-type-converters

下篇我會和大家分享關(guān)于自定義屬性處理的文章,<AutoMapper搬運(yùn)工之自定義屬性計算>/另外我還在寫一篇關(guān)于數(shù)據(jù)驗(yàn)證的文章,歡迎大家到時候來拍磚。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平昌县| 丰城市| 长岛县| 西城区| 湖北省| 八宿县| 沙坪坝区| 右玉县| 英山县| 涿州市| 勃利县| 宁海县| 云林县| 谢通门县| 育儿| 莫力| 界首市| 运城市| 阿坝县| 清河县| 襄樊市| 尼勒克县| 正宁县| 苏州市| 西林县| 水富县| 昭通市| 繁昌县| 台前县| 兰溪市| 晋城| 兴海县| 青冈县| 台南市| 潜江市| 德庆县| 璧山县| 贵溪市| 贵溪市| 新巴尔虎右旗| 濮阳市|