C#中使用AutoMapper

AutoMapper是一种流行的对象到对象映射库,可用于映射属于不同类型的对象。例如,您可能需要将应用程序中的DTO(数据传输对象)映射到模型对象。
AutoMapper省去了手动映射此类不兼容类型的一个或多个属性的繁琐工作。

一、在Visual Studio中创建一个项目
笔者采用控制台应用程序。

然后安装AutoMapper。可以在NuGet软件包管理器窗口安装AutoMapper

二、使用AutoMapper创建映射
诸如AutoMapper之类的对象到对象映射器将一种类型的输入对象转换为另一种类型的输出对象。考虑以下两个类。

  //实体
  public class AuthorModel
  {
    public int ID { get; set; }
    public string AuthorName { get; set; }
    public string Sex { get; set; }
    public int Age { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
  }
  
  //映射实体DTO
  public class AuthorDTO
  {
    public int ID { get; set; }
    public string AuthorName { get; set; }
    public string Sex { get; set; }
    public int Age { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
  }

配置类型AuthorModel和AuthorDTO之间创建映射关系。

      var config = new MapperConfiguration(cfg =>
      {
        cfg.CreateMap<AuthorModel, AuthorDTO>();
      });

然后,执行类型之间的映射就像下面的代码所示一样简单。

      IMapper iMapper = config.CreateMapper();
      var model = new AuthorModel();
      var MapAuthor = iMapper.Map<AuthorModel, AuthorDTO>(model);//映射实体

三、使用AutoMapper完整示例
现在让我们处理一些数据。请参考以下代码,该代码将一些数据存储到源对象中,然后在完成映射后在目标对象中显示属性值。

    static void Main(string[] args)
    {
      //注册配置
      var config = new MapperConfiguration(cfg =>
      {
        cfg.CreateMap<AuthorModel, AuthorDTO>();
      });


      //创建映射
      IMapper iMapper = config.CreateMapper();
      
      var model = new AuthorModel();
      model.ID = 1;
      model.AuthorName = "LaoPaoEr";
      model.Sex = "男";
      model.Age = 23;
      model.Phone = "18276250000";
      model.Address = "中国上海市浦东新区XXXXX";

      var MapAuthor = iMapper.Map<AuthorModel, AuthorDTO>(model);//映射实体

      Console.WriteLine(MapAuthor);
      Console.WriteLine($"Author Name: {model.AuthorName}");
      Console.ReadLine();
    }

当您执行上述代码时,将显示存储在目标对象中的作者姓名,使用AutoMapper成功映射了对象!
更多AutoMapper用法请转到http://automapper.org/

posted @   无昵称老炮儿  阅读(341)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示