CodeMapper 1.0.7

dotnet add package CodeMapper --version 1.0.7
                    
NuGet\Install-Package CodeMapper -Version 1.0.7
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CodeMapper" Version="1.0.7" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CodeMapper" Version="1.0.7" />
                    
Directory.Packages.props
<PackageReference Include="CodeMapper" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CodeMapper --version 1.0.7
                    
#r "nuget: CodeMapper, 1.0.7"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CodeMapper@1.0.7
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CodeMapper&version=1.0.7
                    
Install as a Cake Addin
#tool nuget:?package=CodeMapper&version=1.0.7
                    
Install as a Cake Tool

CodeMapper

  • 支持递归引用的映射
  • 支持部分集合的转换,包含:
T[]//数组,如果作为目标对象的属性,必须是可写属性
//以下集合,如果目标对象的属性不为null,直接覆盖元素,否则新建一个新的对象赋值到成员
IList<T>
List<T>
ICollection<T>
HashSet<T>
ISet<T>
Queue<T>
Stack<T>
  • 配置映射规则
  • 支持通过成员名称匹配规则映射
  • 支持忽略成员
CodeMapper.Mapper.Config(config =>
{
    //指定映射引用类型属性的最大深度
    config.ReferencePropertyHandle = CodeMapper.Metas.ReferencePropertyHandle.Depth;    
    //指定映射引用类型属性的最大深度为10
    config.MaxDepth = 10;
    //默认true,如果设置为false,需要为类型指定转换规则
    config.BindWhenNeed = true;
    //成员名称匹配规则映射
    config.SetNameMatching((x, y) =>
    {
        if(x.Equals(y, StringComparison.OrdinalIgnoreCase))
            return true;
        if(x + "Model" == y)
            return true;
        if(y + "Model" == x)
            return true;
        if(x.Replace("Models", "s") == y)
            return true;
        if(y.Replace("Models", "s") == x)
            return true;

        return false;
    });
    // 全局忽略时间戳字段
    config.GlobalIgnore<IModel>(x=>x.RowVersion);
});
  • 支持通过自定义转换函数映射
CodeMapper.Mapper.BindCustom<Model1, Model2>(b => new Model2
{
    ID = b.ID,
    ByteInt = 1
}); 
  • 支持通过表达式映射成员
CodeMapper.Mapper.Bind<Model1, Model2>(b =>
{
    //表达式映射
    b.Bind(x => x.Name, x => x.Name + "111");
    b.Bind(x => x.Name2, x => "111");
    //成员映射
    b.Bind(x => x.Name3, x => x.Name4);
    //忽略成员
    b.Ignore(x => x.ID);
});
  • ReferencePropertyHandle
/// <summary> 忽略 </summary>
Ignore,
/// <summary> 映射到指定深度 </summary>
Depth,
/// <summary>  循环映射(通过字典) </summary>
Loop
类型转换时优先使用自定义转换方法
通过Bind方法指定的映射会覆盖全局忽略
通过Bind方法指定映射规则时未指定的目标成员,使用全局成员名称匹配规则
简单类型通过.Net默认的转换方法
集合对象通过集合操作方法转换
普通类对象的映射通过ExpressionTree构建转换方法

部分类和代码参考了TinyMapper

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net40 is compatible.  net403 was computed.  net45 was computed.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETFramework 4.0

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.7 282 12/27/2023
1.0.6 395 2/6/2023
1.0.4 702 6/24/2020
1.0.3 663 6/20/2020
1.0.2 660 6/16/2020
1.0.1 612 6/12/2020
1.0.0 606 6/12/2020