publicclassUser{ publicstring Name { get; set; } publicint Age { get; set; } publicstring Sex { get; set; } publicstring like { get; set; }}publicclassUserDto{ publicstring name { get; set; } publicint UserAge { get; set; } publicstring UserSex { get; set; } publicstring like { get; set; }}
简单使用
/** 默认情况下,无需任何配置,Mapster会根据两个实体字段名称相同进行匹配* 第一次调用时,配置会被缓存,第二次将会从缓存中取,以此提升性能*/var user = new User();var dto = user.Adapt();//映射为新对象user.Adapt(dto);//在目标对象的基础上进行映射//注意:Adapt扩展方法使用的配置为 `TypeAdapterConfig.GlobalSettings`
Mapster 配置 (TypeAdapterConfig)
可以直接使用 Mapster 内置的全局静态配置
TypeAdapterConfig.GlobalSettings
,也可以实例化一个配置
new TypeAdapterConfig()
推荐使用实例化的方式,对 TypeAdapterConfig 进行映射配置。
注:Mapster 默认匹配规则是相同字段名之间进行映射。
方式一
直接在 TypeAdapterConfig 配置对象的映射关系
var config = new TypeAdapterConfig();//映射规则config.ForType() .Map(dest => dest.UserAge, src => src.Age) .Map(dest => dest.UserSex, src => src.Sex);var mapper = new Mapper(config);//务必将mapper设为单实例var user = new User{Name = "xiaowang",Age = 18,Sex = "boy"};var dto = mapper.Map(user);
字段带有前后缀,可以使用
NameMatchingStrategy.ConvertDestinationMemberName
对目标字段名称进行替换,使得它和源字段名称相同。还有替换源字段的方法
NameMatchingStrategy.ConvertSourceMemberName
注意:如果一个
ForType
定义多个
NameMatchingStrategy
,后定义的会覆盖先定义的规则,所以只有最后定义的规则会生效
var config = new TypeAdapterConfig();//使用config.ForType() .NameMatchingStrategy(NameMatchingStrategy.ConvertDestinationMemberName(dest => dest.Replace("User", "")));
var config = new TypeAdapterConfig();config.ForType().Map(dest => dest.UserAge, src => src.Age);//...//覆盖 User 和 UserDto 之前的配置config.NewConfig().Map(dest=>dest.UserAge,src=>100);//扩展知识:覆盖Mapster默认静态配置TypeAdapterConfig.NewConfig().Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);
运行时传参
允许运行时传入数据,干预映射过程
var config = new TypeAdapterConfig();config.ForType() .Map(dest => dest.name, src => MapContext.Current.Parameters["userName"]);//配置运行时参数var mapper = new Mapper(config);//使用时传入数据var user = new User();var dto = mapper.From(user).BuildAdapter().AddParameters("userName","xiaowang").AdaptToType();
Dictionary<string,object> dict = new User().Adaptstring[ span],object="">>();//object 到 Dictionary 的转换string s = 123.Adapt<string>(); //equal to 123.ToString();int i = "123".Adapt<int>(); //equal to int.Parse("123");