大佬教程收集整理的这篇文章主要介绍了[非专业翻译] Mapster - 自定义命名约定,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
[非专业翻译] 是对没有中文文档进行翻译的系列博客,文章由机翻和译者自己理解构成,和原文相比有所有不同,但意思基本一致。
因个人能力有限,如有谬误之处还请指正,多多包涵。
本文将说明 Mapster 的 自定义命名约定
NameMatchingStrategy
值为 NameMatchingStrategy.Flexible
来支持更加灵活的名称映射规则,这个映射规则支持名称在 PascalCase
, camelCase
, lower_case
, UPPER_CASE
之间互相映射:
//global
TypeAdapterConfig.GlobalSetTings.Default.NameMatchingStrategy(NameMatchingStrategy.FlexiblE);
//type pair
TypeAdapterConfig<Foo, Bar>.NewConfig().NameMatchingStrategy(NameMatchingStrategy.FlexiblE);
当存在一个名称为 @H_482_17@miXcAsE 到名称为 @H_482_17@mixCase 的映射时, NameMatchingStrategy.Flexible
无法支持,因为它会把 @H_482_17@miXcAsE 处理为 @H_482_17@mi-Xc-As-E,因此我们应当使用 NameMatchingStrategy.IgnoreCase
来实现这个映射:
TypeAdapterConfig.GlobalSetTings.Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCasE);
如果存在以下的类型:
public class Poco
{
public String Name { get; set; }
public String Desc { get; set; }
public int age { get; set; }
}
public class Dto
{
public String m_Name { get; set; }
public String m_Desc { get; set; }
public int m_Age { get; set; }
}
可以使用 @H_482_17@map 方法配置每个属性的映射,但这样会大大的增加编码工作量。
在这个时候就可以使用 ConvertsourceMemberName
配置源类型的成员命名,来实现需求:
TypeAdapterConfig<Poco, Dto>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.ConvertsourceMemberName(name => "m_" + Name));
同样也可以使用 ConvertDesTinationMemberName
配置目标类型的成员命名来实现需求:
TypeAdapterConfig<Poco, Dto>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.ConvertDesTinationMemberName(name => name.replace("m_", "")));
如果想要修改 Poco
到 IDictionary<String, T>
映射 的字段命名规则为 camelCase
,那么可以修改 NameMatchingStrategy
为 NameMatchingStrategy.ToCamelCase
。
TypeAdapterConfig<Poco, Dictionary<String, object>>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.ToCamelCasE);
如果想要从 camelCase
命名规则的 IDictionary<String, T>
到 Poco
,那么可以修改 NameMatchingStrategy
为 NameMatchingStrategy.FromCamelCase
TypeAdapterConfig<Dictionary<String, object>, Poco>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.FromCamelCasE);
注意!映射
IDictionary<String, T>
到Poco
也可以使用Flexible
或IgnoreCase
,在这两种命名约定规则下这两种效率比较低,
GetMemberName
方法可实现。
例如,通过在类的属性上标记 JsonProperty
特性指定属性名称:
public class Poco
{
[JsonProperty("code")]
public String Id { get; set; }
}
通过 GetMemberName
方法配置读取成员的 JsonPropertyAttribute
特性获取属性名称:
TypeAdapterConfig.GlobalSetTings.Default
.GetMemberName(member => member.GetCustomAttributes(true)
.ofType<JsonPropertyAttribute>()
.FirstOrDefault()?.PropertyName
); //if return null, property will not be renamed
注意!如果
GetMemberName
返回结果为空,那么将不会重写成员名称
以上是大佬教程为你收集整理的[非专业翻译] Mapster - 自定义命名约定全部内容,希望文章能够帮你解决[非专业翻译] Mapster - 自定义命名约定所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。