首页 > 其他分享 >.NET领域性能最好的对象映射框架Mapster使用方法

.NET领域性能最好的对象映射框架Mapster使用方法

时间:2023-11-25 13:44:41浏览次数:33  
标签:src 映射 dest 对象 Mapster NET public

 

Mapster是一个开源的.NET对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射。在本文中,我将详细介绍如何在.NET中使用Mapster,并提供一些实例和源代码。

和其它框架性能对比:

 

Mapster的安装和配置:

  1. 首先,打开Visual Studio并创建一个新的.NET项目。
  2. 在NuGet包管理器控制台中运行以下命令来安装Mapster:Install-Package Mapster。
  3. 在项目中添加一个新的类文件,命名为MappingConfig.cs。这个类将用于配置Mapster的映射规则。

配置映射规则:
在MappingConfig.cs文件中,添加以下代码来配置映射规则:

using Mapster;

public static class MappingConfig
{
    public static void Configure()
    {
        TypeAdapterConfig.GlobalSettings.Default.NameMatchingStrategy(NameMatchingStrategy.Flexible);
        
        TypeAdapterConfig.GlobalSettings.Default.PreserveReference(true);
        
        // 添加映射规则
        TypeAdapterConfig<MySource, MyDestination>.NewConfig()
            .Map(dest => dest.DestinationProperty, src => src.SourceProperty)
            .Map(dest => dest.AnotherProperty, src => src.AnotherProperty);
    }
}

在上面的代码中,我们首先设置了Mapster的一些全局设置。
NameMatchingStrategy.Flexible表示属性名称不区分大小写。PreserveReference(true)表示保留引用关系。

然后,我们使用TypeAdapterConfig类的NewConfig方法来创建一个新的映射规则。在这个例子中,我们将MySource类映射到MyDestination类。使用Map方法来指定属性之间的映射关系。

使用Mapster进行对象映射:
在我们配置好映射规则后,我们可以在代码中使用Mapster来进行对象之间的映射。下面是一个简单的示例:

using Mapster;

public class MySource
{
    public string SourceProperty { get; set; }
    public string AnotherProperty { get; set; }
}

public class MyDestination
{
    public string DestinationProperty { get; set; }
    public string AnotherProperty { get; set; }
}

public class Program
{
    static void Main(string[] args)
    {
        // 配置映射规则
        MappingConfig.Configure();
        
        // 创建源对象
        var source = new MySource
        {
            SourceProperty = "Hello",
            AnotherProperty = "World"
        };
        
        // 执行映射
        var destination = source.Adapt<MyDestination>();
        
        // 输出结果
        Console.WriteLine(destination.DestinationProperty); // 输出:Hello
        Console.WriteLine(destination.AnotherProperty); // 输出:World
    }
}

在上面的示例中,我们首先调用MappingConfig.Configure方法来配置映射规则。然后,我们创建了一个源对象source,并设置了它的属性值。接下来,我们使用Adapt方法将源对象映射到目标对象destination。最后,我们可以通过访问目标对象的属性来获取映射结果。

高级用法:
Mapster还提供了一些高级用法,用于处理更复杂的映射场景。

  1. 忽略属性映射:
    有时候,我们可能希望在映射过程中忽略某些属性。可以使用Ignore方法来实现:
TypeAdapterConfig<MySource, MyDestination>.NewConfig()
    .Ignore(dest => dest.DestinationProperty);
  1. 自定义属性映射:
    可以使用MapWith方法来自定义属性之间的映射逻辑:
TypeAdapterConfig<MySource, MyDestination>.NewConfig()
    .Map(dest => dest.DestinationProperty, src => src.SourceProperty.ToUpper());
  1. 集合映射:
    Mapster还支持集合之间的映射。例如,我们有一个包含多个MySource对象的列表,我们可以使用Adapt方法将它们映射到包含多个MyDestination对象的列表:
var sourceList = new List<MySource>
{
    new MySource { SourceProperty = "Hello", AnotherProperty = "World" },
    new MySource { SourceProperty = "Foo", AnotherProperty = "Bar" }
};

var destinationList = sourceList.Adapt<List<MyDestination>>();
  1. 嵌套对象映射:
    如果源对象和目标对象中包含嵌套的对象,我们可以使用MapWith方法来处理嵌套对象的映射:
TypeAdapterConfig<MySource, MyDestination>.NewConfig()
    .Map(dest => dest.NestedObject, src => src.NestedObject.Adapt<NestedDestination>());

以上就是使用Mapster进行对象映射的方法、步骤和一些高级用法的介绍。通过使用Mapster,我们可以轻松地处理对象之间的映射,并且可以根据需要进行自定义和扩展。

 

标签:src,映射,dest,对象,Mapster,NET,public
From: https://www.cnblogs.com/hanbing81868164/p/17855164.html

相关文章

  • [MDP.NetCore] 使用Azure Portal,開發一個從GitHub持續佈署到Azure Container Apps的We
    使用AzurePortal,開發一個從GitHub持續佈署到AzureContainerApps的Web站台程式碼簽入GitHub之後,啟動GitHubAction流程,編譯並部署程式到AzureContainerApps,是開發系統時常見的功能需求。本篇範例協助開發人員使用GitHub與AzurePortal,逐步完成必要的設計和實作。範例下載:Sl......
  • [岩禾溪] C++20项目 muduo网络库 项目实战 (2)InetAddress & Channel
    ​ 目录 ​本项目由岩禾溪原创InetAddress.ixx模块介绍类InetAddress:C++20新特性内容:InetAddress.cpp函数实现解释:Channel.ixx模块介绍类Channel:Channel.cpp模块导入和常量定义:类Channel的函数实现:关于注释部分:更新LoggerLogger.ixx(更新) ​编辑本......
  • .NET8极致性能优化Non-GC Heap
    前言.NET8里面JIT引入了一个新的机制,叫做Non-GCHeap。JIT可以确保相关对象分配在Non-GCHeap上,该堆像其名称一样,不受GC管理。JIT需要保证这个对象没有被GC引用,并且在这个对象的生命周期内一直是根对象(不会被GC消灭的对象)的状态。原文:.NET8极致性能优化Non-GCHeap概述为什......
  • .NET Core MVC基础之页面传值方式
    .NETCoreMVC基础之页面传值方式......
  • 在.Net中使用Java代码?
    前言你没有看错,我确实在.Net6的项目中在编写java,我都usingjava了,算不算在写java那?usingcom.microsoft.sqlserver.jdbc;usingjava.sql;并且编辑器还带提示的功能这一切都是借助IKVM来实现的,或许有些人还听说过使用IKVM的CLI命令来转换jar包,比如使用Bing搜索:ikvm转换jar包......
  • 【OneTBB】MacOS&Linux环境下配置OneTBB库
    参考博客MacOShttps://macappstore.org/tbb/Linuxhttps://blog.csdn.net/Twilightzr/article/details/126533557 代码仓库https://github.com/oneapi-src/oneTBB 安装展示MacOS命令行输入1brewinstalltbbViewCode 截图展示检查是否成功安装好......
  • Graph Neural Networks with Diverse Spectral Filtering
    目录概符号说明DSF代码GuoJ.,HuangK,YiX.andZhangR.Graphneuralnetworkswithdiversespectralfiltering.WWW,2023.概为每个结点赋予不同的多项式系数.符号说明\(\mathcal{V}\),nodeset,\(|\mathcal{V}|=N\);\(\mathcal{E}\),edgeset;\(\mathcal{......
  • 通过modbus转profinet网关多通道轮询替代485通讯程序轮询
    通过modbus转profinet网关多通道轮询替代485通讯程序轮询际应用中,由于其通讯方式的不同,不同类型的设备之间的通讯存在一定的困难。为了克服这一问题,可以采取一些技术手段来进行优化,比如通过modbus转profinet网关的多通道轮询来替代485通讯程序轮询。通过使用modbus转profinet网关......
  • Profinet转ModbusTCP网关详解
    Profinet转ModbusTCP网关详解Profinet转ModbusTCP网关是一种常见的工业通信设备,广泛应用于现代工业自动化系统中。通过将Profinet协议转换成ModbusTCP协议,实现了不同网络之间的互联互通。这种网关设备具有简单、可靠的特点,能够满足不同设备之间的数据传递需求。在实际应用中,Prof......
  • 对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思
    一:背景1.讲故事最近接连遇到了几起2G虚拟地址紧张导致的程序崩溃,基本上90%都集中在医疗行业,真的很无语,他们用的都是一些上古的XP,Windows7x86,我也知道技术人很难也基本无法推动硬件系统和设备的升级,这里蕴含了巨大的人情世故。写这一篇的目的是想系统化的整理一下如何配......