C#对象映射器之Mapster

简介

Mapster是一个快,小巧,功能强大的对象映射.Net框架

例子

我有两个Model类且他们的属性一致,我们将 SourceObjectTest赋值给DestObjectTest该怎么做?

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "张三";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "XX省XX市XX县";
sourceObject.Sex = "男";

常规做法

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;
}

这种类型的代码写起来相当枯燥乏味且累那么我们可不可以用第三方的库来解决这种问题呢,那肯定是可以的,像AutoMapper和Mapster就是解决这种问题的,而我为什么选择Mapster,主要还是Mapster性能更好!

安装Mapster包

0861f2fe5dc1a3d407fbf6f233f759a2.png

使用Mapster

基本映射之映射到新对象

public void BasicMappingNewObject(SourceObjectTest sourceObject)
 {
    DestObjectTest destObject= sourceObject.Adapt<DestObjectTest>();
 }

基本映射之映射到现有对象

public void BasicMappingExistObject(SourceObjectTest sourceObject)
 {
   DestObjectTest destObject = new DestObjectTest();
   destObject.Name = "李四";
   destObject.Age = new List<int> { 20 };
  destObject.Address = "中国XX省XX市XX县";
  destObject.Sex = "女";    
  destObject = sourceObject.Adapt(destObject);
 }

自定义映射

当我们的映射对象的属性与源对象的属性不一致时我们就可以使用!eg:SourceObjectTest的name属性和DifferentDestObjectTest的UserName是一个意思,只是创建Model类的时候取得名字不一样,这时候基本映射映射不了UserName字段,那我们就要使用自定义映射了!

一:直接在 TypeAdapterConfig 配置对象的映射关系
public void BasicMappingExtend(SourceObjectTest sourceObject)
{
var config = new TypeAdapterConfig();
config.ForType<SourceObjectTest, DifferentDestObjectTest>()
            .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<DifferentDestObjectTest>(sourceObject);
}
二:使用接口的方式
public class DifferentDestObjectTestRegister : IRegister
    {
        public void Register(TypeAdapterConfig config)
        {
            config.ForType<SourceObjectTest, DifferentDestObjectTest>()
          .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<DifferentDestObjectTest>(sourceObject);
    }
三:使用映射配置
public void MappingConfig(SourceObjectTest sourceObject)
        {
            TypeAdapterConfig<SourceObjectTest, DifferentDestObjectTest>
              .NewConfig()
              .Map(dest => dest.UserName,
                  src => src.Name);

        DifferentDestObjectTest differentDestObjectTest = TypeAdapter
        .Adapt<SourceObjectTest, DifferentDestObjectTest>(sourceObject);
        }

当然还有其它功能,可前往官网!- 传送门!

最后大家如果喜欢我的文章,还麻烦给个关注并点个赞, 希望net生态圈越来越好!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值