我有一个真正的爆炸式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属性设置的爆炸值?
答案 0 :(得分:1)
属性是元数据。如果要读取元数据,则应使用反射。您可以使用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;