ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[非专业翻译] Mapster - 自定义映射

2021-06-27 08:31:07  阅读:296  来源: 互联网

标签:src 非专业 自定义 映射 Map dest NewConfig Mapster public


[非专业翻译] Mapster - 自定义映射

系列介绍

[非专业翻译] 是对没有中文文档进行翻译的系列博客,文章由机翻和译者自己理解构成,和原文相比有所有不同,但意思基本一致。

因个人能力有限,如有谬误之处还请指正,多多包涵。

正文

本文将说明 Mapster 中的 自定义映射

自定义成员的映射关系

Mapster 支持自定义映射某个属性的值:

TypeAdapterConfig<TSource, TDestination>
    .NewConfig()
    .Map(dest => dest.FullName,
        src => string.Format("{0} {1}", src.FirstName, src.LastName));

也可以在源属性类型和目标属性类型不同时进行映射:

TypeAdapterConfig<TSource, TDestination>
    .NewConfig()
    .Map(dest => dest.Gender,      // dest.Gender: Genders.Male 或 Genders.Female 枚举类型
        src => src.GenderString); // src.GenderString: "Male" 或 "Female" 字符串类型

根据条件映射

可以通过设置 Map 方法的第三个参数,实现在 源对象 满足某些条件下进行映射;

当存在多个条件的情况下,Mapster 会依次往下执行判断条件是否满足,直到满足条件为止;

当找不到满足条件的映射时,将分配空值或默认值:

TypeAdapterConfig<TSource, TDestination>
    .NewConfig()
    .Map(dest => dest.FullName, src => "Sig. " + src.FullName, srcCond => srcCond.Country == "Italy")
    .Map(dest => dest.FullName, src => "Sr. " + src.FullName, srcCond => srcCond.Country == "Spain")
    .Map(dest => dest.FullName, src => "Mr. " + src.FullName);

注意!如果想要在满足条件时跳过映射,应该使用 IgnoreIf,详情可参阅 忽略成员

映射非公开成员

如果存在私有成员需要映射,那么可以使用 Map 方法指定成员名称实现私有成员映射:

TypeAdapterConfig<TSource, TDestination>
    .NewConfig()
    .Map("PrivateDestName", "PrivateSrcName");

更多有关于映射非公开成员的资料,请参阅 映射非公开成员

目标多级属性映射

使用 Map 方法可以为 目标多级别属性配置映射:

TypeAdapterConfig<Poco, Dto>.NewConfig()
    .Map(dest => dest.Child.Name, src => src.Name);

空映射

如果 src.Childnull,那么映射到 dest.Name 的配置不会抛出 NullPointerException ,而是映射空值:

TypeAdapterConfig<Poco, Dto>.NewConfig()
    .Map(dest => dest.Name, src => src.Child.Name);

多个源

映射 Dto 中属性的值到 Poco

public class Poco
{
    public string Name { get; set; }
    public string Extra { get; set; }
}

public class Dto
{
    public string Name { get; set; }
    public SubDto SubDto { get; set; }
}
public class SubDto
{
    public string Extra { get; set; }
}

如果想将 Dto 中的所有属性和 Dto.SubDto 中的所有属性映射到 Poco,那么可以通过配置 dto.SubDto 映射到 Poco 来实现:

TypeAdapterConfig<Dto, Poco>.NewConfig()
    .Map(poco => poco, dto => dto.SubDto);

映射两个类型到一个类型

如果想将 Dto1Dto2两个类型映射到 Poco 类型,那么可以通过将 Dto1 Dto2 包装成一个 tuple,然后将 tuple.Item1tuple.Item2 映射到 Poco 来实现:

TypeAdapterConfig<(Dto1, Dto2), Poco>.NewConfig()
    .Map(dest => dest, src => src.Item1)
    .Map(dest => dest, src => src.Item2);

标签:src,非专业,自定义,映射,Map,dest,NewConfig,Mapster,public
来源: https://www.cnblogs.com/staneee/p/14913647.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有