[英]C# how to retrieve a modified Enum Name value
我有一個真正的功能強大的API,其中到處都有使用命名約定的返回值...從駝峰到Pascal到大寫再到帶有空格的字符串...真是一團糟...
因此,為了序列化或反序列化,使用json.net很簡單,只需添加jsonSerializer或添加具有json屬性的類,如下所示:
[JsonProperty(PropertyName = "somebanged upName")]
public string[] SomethingBangedUp;
在將一些值賦值給枚舉時,我也想做類似的事情,然后獲取“敲打名稱”列表而不是變量名稱:
public enum SomeBangedUpEnum
{
[EnumMember(Value = "someThingelse BangedUp")]
SomethingElseBangedUp,
}
var v = Enum.GetNames(typeof(SomeBangedUpEnum)).ToList();
但這檢索了變量名稱“ SomethingElseBangedUp”,而不是我希望的“ someThingelse BangedUp”;
知道如何獲取EnumMember屬性設置的值嗎?
屬性是元數據。 如果要讀取元數據,則應使用反射。 您可以使用GetCustomAttribute擴展從類型成員讀取屬性值。 例如,如果您想獲取枚舉成員的所有名稱:
var v = typeof(SomeBangedUpEnum)
.GetFields(BindingFlags.Public|BindingFlags.Static)
.Select(f => f.GetCustomAttribute<EnumMemberAttribute>()?.Value)
.ToList();
或者,如果您想獲取某個特定枚舉成員的名稱,則只能獲取特定字段,而不是獲取所有字段:
var name = typeof(SomeBangedUpEnum)
.GetField(SomeBangedUpEnum.SomethingElseBangedUp.ToString())
.GetCustomAttribute<EnumMemberAttribute>()?.Value;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.