C#對(duì)象映射器之Mapster
簡(jiǎn)介
Mapster是一個(gè)快,小巧,功能強(qiáng)大的對(duì)象映射.Net框架
例子
我有兩個(gè)Model類且他們的屬性一致,我們將 SourceObjectTest賦值給DestObjectTest該怎么做?
SourceObjectTest?sourceObject?=?new?SourceObjectTest();
sourceObject.Name?=?"張三";
sourceObject.Age?=?new?List?{?20,?13,?26?};
sourceObject.Address?=?"XX省XX市XX縣";
sourceObject.Sex?=?"男"; 常規(guī)做法
public?void?Routine(SourceObjectTest?sourceObject)
{
DestObjectTest?destObject?=?new?DestObjectTest();
?destObject.Name?=?sourceObject.Name;
destObject.Sex?=?sourceObject.Sex;
destObject.Address?=?sourceObject.Address;
destObject.Age?=?sourceObject.Age;
}這種類型的代碼寫(xiě)起來(lái)相當(dāng)枯燥乏味且累那么我們可不可以用第三方的庫(kù)來(lái)解決這種問(wèn)題呢,那肯定是可以的,像AutoMapper和Mapster就是解決這種問(wèn)題的,而我為什么選擇Mapster,主要還是Mapster性能更好!
安裝Mapster包

使用Mapster
基本映射之映射到新對(duì)象
?public?void?BasicMappingNewObject(SourceObjectTest?sourceObject)
?{
????DestObjectTest?destObject=?sourceObject.Adapt();
?} 基本映射之映射到現(xiàn)有對(duì)象
?public?void?BasicMappingExistObject(SourceObjectTest?sourceObject)
?{
???DestObjectTest?destObject?=?new?DestObjectTest();
???destObject.Name?=?"李四";
???destObject.Age?=?new?List?{?20?};
??destObject.Address?=?"中國(guó)XX省XX市XX縣";
??destObject.Sex?=?"女";????
??destObject?=?sourceObject.Adapt(destObject);
?} 自定義映射
當(dāng)我們的映射對(duì)象的屬性與源對(duì)象的屬性不一致時(shí)我們就可以使用!eg:SourceObjectTest的name屬性和DifferentDestObjectTest的UserName是一個(gè)意思,只是創(chuàng)建Model類的時(shí)候取得名字不一樣,這時(shí)候基本映射映射不了UserName字段,那我們就要使用自定義映射了!
一:直接在 TypeAdapterConfig 配置對(duì)象的映射關(guān)系
?public?void?BasicMappingExtend(SourceObjectTest?sourceObject)
{
var?config?=?new?TypeAdapterConfig();
config.ForType()
????????????.Map(dest?=>?dest.UserName,?src?=>?src.Name)
????????????.Map(dest?=>?dest.Address,?src?=>?src.Name?+?src.Address);
var?mapper?=?new?Mapper(config);
?DifferentDestObjectTest?differentDestObjectTest?=?mapper.Map(sourceObject);
} 二:使用接口的方式
??public?class?DifferentDestObjectTestRegister?:?IRegister
????{
????????public?void?Register(TypeAdapterConfig?config)
????????{
????????????config.ForType()
??????????.Map(dest?=>?dest.UserName,?src?=>?src.Name)
??????????.Map(dest?=>?dest.Address,?src?=>?src.Name?+?src.Address);
????????}
????}
????
??public?void?BasicMappingExtend(SourceObjectTest?sourceObject)
????{
????????????var?config?=?new?TypeAdapterConfig();
????????????config.Scan(Assembly.GetExecutingAssembly());
????????????var?mapper?=?new?Mapper(config);
????????????DifferentDestObjectTest?differentDestObjectTest?=?mapper.Map(sourceObject);
????} 三:使用映射配置
?????public?void?MappingConfig(SourceObjectTest?sourceObject)
????????{
????????????TypeAdapterConfig
??????????????.NewConfig()
??????????????.Map(dest?=>?dest.UserName,
??????????????????src?=>?src.Name);
????????DifferentDestObjectTest?differentDestObjectTest?=?TypeAdapter
????????.Adapt(sourceObject);
????????} 當(dāng)然還有其它功能,可前往官網(wǎng)!-?傳送門(mén)!
最后大家如果喜歡我的文章,還麻煩給個(gè)關(guān)注并點(diǎn)個(gè)贊, 希望net生態(tài)圈越來(lái)越好!
評(píng)論
圖片
表情
