当前位置: 首页 > news >正文

C#自定义类的属性名并且通过反射获取属性名

一般情况下我们的返回实体都为英文命名,某些时候我们想自定义返回的属性名称。在C#中,不能直接通过内置的反射API来获取属性的“自定义名字”,因为属性本身在元数据中并没有这样的概念。但是,可以使用自定义属性(Attribute)来为类成员(如属性)添加额外的元数据,并通过反射来读取这些元数据。

首先,定义自定义的DisplayNameAttribute:

using System;  [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]  
public class DisplayNameAttribute : Attribute  
{  public string DisplayName { get; }  public DisplayNameAttribute(string displayName)  {  DisplayName = displayName;  }  
}

然后,在Test类中使用这个自定义属性:

public class Test  
{  [DisplayName("姓名")]  public string? Name { get; set; }  [DisplayName("年龄")]  public int? Age { get; set; }  
}

然后可以通过反射来获取这些自定义的显示名称:

using System;  
using System.Reflection;  public class ReflectionExample  
{  public static void Main()  {  Type testType = typeof(Test);  foreach (PropertyInfo property in testType.GetProperties())  {  DisplayNameAttribute displayNameAttribute = property.GetCustomAttribute<DisplayNameAttribute>();  if (displayNameAttribute != null)  {  Console.WriteLine($"属性名: {property.Name}, 自定义显示名: {displayNameAttribute.DisplayName}");  }  else  {  Console.WriteLine($"属性名: {property.Name}, 没有自定义显示名");  }  }  }  
}

当你运行上面的Main方法时,它将输出:

属性名: Name, 自定义显示名: 姓名  
属性名: Age, 自定义显示名: 年龄

相关文章:

  • MinIO Enterprise Cache:实现超性能的分布式 DRAM 缓存
  • html入门综合练习
  • STM32基于DMA数据转运和AD多通道
  • js下拉框选择筛选数据数据联动
  • c++ 智能指针使用注意事项及解决方案
  • 华为中小企业组网
  • Ai绘画行业又叒翻天了!Stable Diffusion 3.0开源!多图实测附安装包!
  • arsetryhtehrwgefwadasdadasd
  • 算法题解记录29+++全排列(百日筑基)
  • 学习笔记——路由网络基础——路由优先级(preference)
  • Docker从容器打包镜像到本地保存与加载
  • SpringTask-Timer实现定时任务
  • 使用 C# 进行面向对象编程:第 10 部分
  • 嵌入式中间件_1.嵌入式中间件的定义及特点
  • 机器学习python实践——数据“相关性“的一些补充性个人思考
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • es6--symbol
  • Flex布局到底解决了什么问题
  • HashMap剖析之内部结构
  • java概述
  • Laravel 实践之路: 数据库迁移与数据填充
  • Nacos系列:Nacos的Java SDK使用
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue-router 实现分析
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 包装类对象
  • 大主子表关联的性能优化方法
  • 浮现式设计
  • 蓝海存储开关机注意事项总结
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 鱼骨图 - 如何绘制?
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​520就是要宠粉,你的心头书我买单
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #define 用法
  • #大学#套接字
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1) caustics\
  • (1)bark-ml
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)选择元素——(17)练习(Exercises)
  • (C语言)fread与fwrite详解
  • (C语言)逆序输出字符串
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (void) (_x == _y)的作用
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)js前端开发中设计模式之工厂方法模式