检查给定的 Type 是否是 Enum

我正在为 Json.NET 编写一个 JsonConverter,它应该允许我将任何枚举转换为由[ Description ]属性定义的字符串值。

例如:

public enum MyEnum {
[Description("Sunday")] Sunday,
[Description("Monday")] Monday,
[Description("Tuesday")] Tuesday,
[Description("Wednesday")] Wednesday,
[Description("Thursday")] Thursday,
[Description("Friday")] Friday,
[Description("Saturday")] Saturday
}

我已经有了支持 myEnum.Description()的代码,它显然会返回它的字符串描述。

在 JsonConverter 实现中,有这样一种方法:

    public override bool CanConvert(Type objectType)
{


}

我试图找出如何确定如果 objectType是一个 Enum并返回真,以便转换器知道它可以转换这个对象。因为我有许多 Enum的,我不能明确地检查每一个,所以我希望一个更通用的方式来完成这一点。

76044 次浏览

使用 IsEnum属性:

if(objectType.IsEnum) {
return true;
}

Type.IsEnum 是您正在寻找的

我完全误解了这个问题,因为我把注意力放在了[ Description ]上,所以如果你想检查某个枚举是否有[ Description ]属性(如果 json 在没有属性的情况下大发雷霆) ,这是检查的一种可能方法:

public override bool CanConvert(Type objectType)
{
FieldInfo[] fieldInfo = objectType.GetFields(BindingFlags.Public | BindingFlags.Static);


if( fieldInfo.Length > 0 )
{
return ( fieldInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false).Length > 0 );
}
else
{
return false;
}
}