Mapster在线云测试工具对象映射库
Mapster 是一个开源的.NET 对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射。
<> > <>以下是 Mapster 的一些主要特点和使用方法:> <> > <>**安装**:可以通过 NuGet 包管理器控制台使用以下命令安装 Mapster:`Install-Package Mapster` 或者使用.NET Core CLI 命令:`dotnet add package Mapster`> <> > <>**基本用法**:> <>1. 映射到新对象:Mapster 创建目标对象并将值映射到该对象。> <>```csharp> <>var destObject = sourceObject.adapt<Destination>();> <>```> <>2. 映射到现有对象:先创建对象,然后 Mapster 会将源对象映射到该对象。> <>```csharp> <>sourceObject.adapt(destObject);> <>```> <> > <>**可查询扩展**:Mapster 提供了映射可查询对象(IQueryable)的扩展。例如,使用 Entity Framework 时,可以减少手动编写 select 操作。> <>```csharp> <>using (myDbContext context = new myDbContext())> <>{> <>// 使用 Mapster 提供的 ProjectToType 扩展方法> <>var destinations = context.Sources.ProjectToType<Destination>().ToList();> <>// 相对于手工操作> <>var destinations = context.Sources.Select(c => new Destination> <>{> <>Id = c.Id,> <>Name = c.Name,> <>Surname = c.Surname,> <>....> <>}).ToList();> <>}> <>```> <> > <>**配置(TypeAdapterConfig)**:> <>可以直接使用 Mapster 内置的全局静态配置 `TypeAdapterConfig.GlobalSettings`,也可以实例化一个配置 `new TypeAdapterConfig()`。默认情况下,Mapster 会根据两个实体字段名称相同进行匹配。如果需要更复杂的映射规则,可以进行如下配置:> <>1. 直接在配置对象中设置映射关系:> <>```csharp> <>var config = new TypeAdapterConfig();> <>config.ForType<User, UserDto>()> <>.Map(dest => dest.UserAge, src => src.Age)> <>.Map(dest => dest.UserSex, src => src.Sex);> <>var mapper = new Mapper(config);> <>```> <>2. 使用接口的方式(需要实现 `IRegister`):> <>```csharp> <>public class UserDtoRegister : IRegister> <>{> <>public void Register(TypeAdapterConfig config)> <>{> <>config.ForType<User, UserDto>()> <>.Map(dest => dest.UserAge, src => src.Age);> <>//...> <>}> <>}> <>// 实例化 Mapper> <>var config = new TypeAdapterConfig();> <>// 只有要给定 IRegister 所在的程序集名称,Mapster 会自动识别 IRegister,进行配置注入。> <>config.Scan("程序集名称 1","程序集名称 2");> <>var mapper = new Mapper(config);> <>```> <> > <>**忽略字段**:可以通过以下方式忽略某些字段的映射。> <>```csharp> <>var config = new TypeAdapterConfig();> <>config.ForType<User, UserDto>()> <>.Map(dest => dest.UserAge, src => src.Age)> <>.Map(dest => dest.UserSex, src => src.Sex)> <>.IgnoreNullValues(true) // 忽略空值映射> <>.Ignore(dest => dest.UserAge) // 忽略指定字段> <>.IgnoreAttribute(typeof(DataMemberAttribute)) // 忽略指定特性的字段> <>.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase) // 忽略字段名称的大小写> <>.IgnoreNonMapped(true); // 忽略除以上配置的所有字段> <>config.ForType<User, UserDto>()> <>.IgnoreMember((member, side) =>!member.Type.Namespace.StartsWith("System")); // 实现更细致的忽略规则> <>```> <> > <>与其他对象映射库相比,Mapster 在性能和内存使用上表现较为出色。它旨在提高速度和内存效率,在一些测试中,可以获得 4 倍的性能提升,同时只使用约 1/3 的内存。> <> > <>如果你需要在.NET 项目中进行对象映射,Mapster 是一个值得考虑的选择。你可以根据项目的具体需求,利用其提供的功能来简化和优化对象之间的映射工作。更多详细信息和用法可以参考 Mapster 的官方文档:https://github.com/MapsterMapper/Mapster/wiki> <>> <>