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

发布于:2024-06-17 ⋅ 阅读:(84) ⋅ 点赞:(0)

一般情况下我们的返回实体都为英文命名,某些时候我们想自定义返回的属性名称。在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, 自定义显示名: 年龄

网站公告

今日签到

点亮在社区的每一天
去签到