zoukankan      html  css  js  c++  java
  • [非专业翻译] Mapster

    [非专业翻译] Mapster - 基于规则的映射

    系列介绍

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

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

    正文

    本文将说明 Mapster 基于规则的映射

    基于规则的映射

    Mapster 在默认情况下映射会包含所有的公开字段和属性,但是可以通过 IncludMemberIgnoreMember 方法改变默认的映射行为。

    这两个方法需要传入指令参数,指令参数为以下类型:

    public interface IMemberModel
    {
        Type Type { get; }
        string Name { get; }
        object Info { get; }
        AccessModifier SetterModifier { get; }
        AccessModifier AccessModifier { get; }
        IEnumerable<object> GetCustomAttributes(bool inherit);
    }
    
    public enum MemberSide
    {
        Source,
        Destination,
    }
    

    不映射字段

    可以通过检查成员的类型来决定是否映射,成员的类型分为 PropertyInfo, FieldInfo, ParameterInfo 几种。

    下面这个例子实现了 如果成员类型为 FieldInfo 忽略映射的效果:

    TypeAdapterConfig.GlobalSettings.Default
        .IgnoreMember((member, side) => member.Info is FieldInfo);
    

    只允许映射指定的类型

    通过类型过滤

    只映射存在 validTypes 集合中的类型的成员

    TypeAdapterConfig.GlobalSettings.Default
        .IgnoreMember((member, side) => !validTypes.Contains(member.Type));
    

    通过命名空间过滤

    只映射类型命名空间以 System 开头的成员:

    TypeAdapterConfig.GlobalSettings.Default
        .IgnoreMember((member, side) => !member.Type.Namespace.StartsWith("System"));
    

    映射非公开成员

    如果想要映射非公开成员,可以查看下面的例子:

        TypeAdapterConfig.GlobalSettings.Default
            .IncludeMember((member, side) => member.AccessModifier == AccessModifier.Internal 
                                             || member.AccessModifier == AccessModifier.ProtectedInternal);
    

    只映射拥有 [DataMember] 特性标记的成员

    如果想要只映射拥有 [DataMember] 特性标记的成员,可以查看下面的例子一样:

    TypeAdapterConfig.GlobalSettings.Default
        .IncludeMember((member, side) => member.GetCustomAttributes(true).OfType<DataMemberAttribute>().Any());
    TypeAdapterConfig.GlobalSettings.Default
        .IgnoreMember((member, side) => !member.GetCustomAttributes(true).OfType<DataMemberAttribute>().Any());
    

    只映射公开set的属性

    Mapster 默认会映射 set 不公开的属性,可以使用以下代码关闭此功能:

    TypeAdapterConfig.GlobalSettings.Default
        .IgnoreMember((member, side) => side == MemberSide.Destination
                                        && member.SetterModifier != AccessModifier.Public);
    
    目前学习.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程
    如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】支持,或请我喝杯咖啡【赞赏】,这将是我继续写作,分享的最大动力!
    声明:原创博客!请在转载时在文章开头注明本人博客地址。如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
  • 相关阅读:
    为什么无法从外部访问VSTO对象?
    通过实例代码理解WPF的Dispatcher
    Silverlight打印解决方案2.0之如何自定义表体
    VSTO"无法加载自定义程序集"
    打开silverlight项目之前,您需要安装最新的Silverlight Developer运行时
    Android 3.2 联机测试adb驱动如何安装和配置?
    Android 3.2 应用程序联机(devices)测试失败提示INSTALL_FAILED_INSUFFICIENT_STORAGE
    Android sdk 3.0 sdk3.1 sdk3.2 平板开发环境安装日志
    android 蓝牙开发常见问题总结
    Pad本蓝牙模块检测
  • 原文地址:https://www.cnblogs.com/staneee/p/14913661.html
Copyright © 2011-2022 走看看