我正在编写一些代码,这些代码将发送一封电子邮件,其中包含类属性内部的详细信息。
我认为最好通过reflection
var builder = new StringBuilder();
Type type = obj.GetType();
PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo property in properties)
{
if (property.GetValue(obj, null) != null)
{
builder.AppendLine("<tr>");
builder.AppendLine("<td>");
builder.AppendLine("<b> " + property.Name + " </b>");
builder.AppendLine("</td>");
builder.AppendLine("<td>");
builder.AppendLine(property.GetValue(obj, null).ToString());
builder.AppendLine("</td>");
builder.AppendLine("</tr>");
}
}
这也有助于省去所有尚未设置的属性,这有助于减少代码。
但是property.Name非常正确地输出当前形式的属性名称
public string PropertyA { get; set; }
所以电子邮件看起来像
PropertyA : 123
对用户来说这看起来不友好。那么有没有办法可以更改属性名称以显示不同的内容?
我试过了
[DisplayName("Property A")]
public string PropertyA { get; set; }
应该在电子邮件中显示:
Property A : 123
但是没有优势......在我要走的逻辑道路上有什么可以帮助的吗?
谢谢
答案 0 :(得分:2)
您需要find the attribute and extract the Name value:
var displayNameAttribute = property.GetCustomAttributes
(typeof(DisplayNameAttribute), false)
.FirstOrDefault() as DisplayNameAttribute;
string displayName = displayNameAttribute != null
? displayNameAttribute.DisplayName
: property.Name;
答案 1 :(得分:2)
您需要获取DisplayNameAttribute
您的财产,然后获取Name
:
var attribute = property.GetCustomAttribute<DisplayNameAttribute>();
if(attribute != null)
{
var displayName = attribute.Name;
}