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, 自定义显示名: 年龄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt Json操作

说明 该例子说明了字符串转Json对象&#xff0c;再从Json对象转字符串 代码 #include <QCoreApplication> #include <QTextCodec> #include <iostream> #include <QDebug> #include <QJsonDocument> #include <QJsonObject>using names…

安装torch报cannot uninstall TBB,its a distutils installed project

pycahrm的设置-解释器安装torch&#xff0c;去anaconda文件夹的Lib下site-packages里找&#xff0c;TBB名称的egg.info的文件删掉即可&#xff0c;然后再次安装torch成功

SQLynx荣登Web SQL工具榜首,中国软件快速崛起

近年来&#xff0c;随着互联网技术的迅猛发展&#xff0c;数据库管理工具也在不断进步和创新。 作为一种便捷且高效的数据库管理方式&#xff0c;Web SQL IDE工具逐渐成为开发者和数据库管理员的首选。在众多Web SQL工具中&#xff0c;SQLynx凭借其卓越的功能和用户体验&#x…

随便写写之——CSDN个人主页布局

最近一直在看题&#xff0c;真的好无聊&#xff0c;晚上睡觉前脑子里想的都是JS&#xff0c;不会是焦虑症犯了吧&#xff0c;赶紧写点东西&#xff0c;现在是上午9点38分&#xff0c;想着写个csdn的布局练练手吧。 现在是11点半&#xff0c;写个将近两个小时就写了那么点&#…

web前端教育机构:深度剖析与选择指南

web前端教育机构&#xff1a;深度剖析与选择指南 在数字化时代&#xff0c;web前端技术已成为互联网行业的核心驱动力。为了培养更多优秀的前端开发者&#xff0c;web前端教育机构如雨后春笋般涌现。然而&#xff0c;面对众多的教育机构&#xff0c;如何选择一家适合自己的机构…

如何有效处理服务器后台密码暴露

服务器后台密码的暴露是信息安全领域中的严重事件&#xff0c;它可能引发未经授权的数据访问、恶意软件植入或系统功能滥用等一系列问题。本文将探讨几种处理服务器后台密码暴露的有效策略&#xff0c;包括紧急响应步骤、密码安全增强措施及长期预防机制&#xff0c;并提供实际…

开关电源RCD吸收电路解析与设计

开关电源RCD吸收电路解析与设计 引言 在电源设计中,RCD电路以其出色的能量吸收能力,有效降低电阻损耗,从而被广泛应用。然而,对于新手来说,理解和掌握开关电源中的RCD吸收电路可能是一个挑战。本文旨在深入剖析RCD吸收电路的设计原理和步骤,帮助读者更好地理解和应用这…

Oracle考证对我们有什么帮助?

提升专业技能&#xff1a; Oracle认证考试要求考生掌握Oracle数据库管理的核心知识和技能&#xff0c;通过学习和考试&#xff0c;考生能够系统地掌握Oracle数据库的管理、优化、备份恢复等关键技术&#xff0c;从而显著提升个人在Oracle数据库领域的专业技能。增强职业竞争力&…

流媒体传输基本原理-RTSP

一、相关的基本概念 媒体&#xff1a;信息的载体 多媒体&#xff1a;多种媒体的组合体。 传媒&#xff1a;全称是“传播媒体”&#xff0c;媒体概念中偏重于传播方面的技术组织体系行业。 流媒体&#xff1a;流式地传输媒体&#xff0c;是传播媒体的一种技术&#xff0c;将媒体…

硬件开发笔记(十七):RK3568底板电路串口、485、usb原理图详解

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139589308 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

ROS IMU航向锁定(Python实现)

ROS IMU航向锁定&#xff08;Python实现&#xff09; 实现思路 让大管家rospy发布速度控制话题/cmd_vel设定一个目标朝向角&#xff0c;当姿态信息中的朝向角和目标朝向角不一致时&#xff0c;控制机器人转向目标朝向角 代码示例 要使用Python实现IMU航向锁定的功能&#x…

爬虫案例:建设库JS逆向

爬虫流程 1. 确定目标网址和所需内容 https://www.jiansheku.com/search/enterprise/ 只是个学习案例&#xff0c;所以目标就有我自己来选择&#xff0c;企业名称&#xff0c;法定代表人&#xff0c;注册资本&#xff0c;成立日期 2. 对目标网站&#xff0c;进行分析 动态…

认识Spring 中的BeanPostProcessor

关于BeanPostProcessor和BeanFactoryPostProcessors&#xff0c;将分2篇文章来写&#xff0c;这篇文章是对Spring 中BeanPostProcessor进行了总结 先看下大模型对这个类的介绍&#xff0c;随后再看下这两个类的示例&#xff0c;最后看下这两个类的实现。 这两个类从名字看都很类…

btstack协议栈实战篇--GATT Client - Discover Primary Services

btstack协议栈---总目录-CSDN博客 这个示例展示了如何使用 GATT 客户端 API 来发现第一个其服务的已发现设备的主要服务及其特征。 在 HCI 和 GATT 客户端数据包处理器之间划分逻辑处理。HCI 数据包处理器负责找到远程设备、连接到它,并启动第一个 GATT 客户端…

HTML静态网页成品作业(HTML+CSS)—— 兰蔻化妆品网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

vue阶段复习基础知识以及简单的按钮绑定相关的知识!

vue阶段复习 理论练习 请简述Vue、Node.js、Vscode是什么&#xff0c;以及有什么关系 1.vue是一个轻量级、比较灵活的且支持组件开发的网络框架 2.node.js是让JavaScript运行在服务器上的一种环境 3.Vscode是一款有着丰富插件的代码编辑器 4.vscode就如同画布&#xff0c;node…

排查Spring条件注解未能生效的常见原因

在撰写关于排查Spring条件注解未能生效的文章时&#xff0c;可以按照以下结构进行组织&#xff1a; 标题&#xff1a; 解决Spring条件注解不生效的问题&#xff1a;常见原因与解决方案 引言&#xff1a; 简要介绍Spring条件注解&#xff08;如Conditional&#xff09;的用途&…

网卡聚合链路配置

创建名为mybond0的绑定&#xff0c;使用示例如下&#xff1a; # nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup添加从属接口&#xff0c;使用示例如下&#xff1a; # nmcli con add type bond-slave ifname enp3s0 master mybond0要添加其他从…

反射...

一、反射的定义 二、获取Class对象三种方式 全类名&#xff1a;包名类名。 public class test {public static void main(String [] args) throws ClassNotFoundException {//第一种方式Class class1Class.forName("test02.Student");//第二种方法Class class2Stud…

【区块链】深入解析Proof of Work (PoW): 区块链技术的核心驱动力

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入解析 Proof of Work (PoW): 区块链技术的核心驱动力引言一、PoW基本概念1.1…