检查一个给定的types是一个枚举

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

例如:

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()的代码,它显然会返回它的string描述。

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

  public override bool CanConvert(Type objectType) { } 

我想弄清楚如何确定objectType是一个Enum并返回true,以便转换器知道它可以转换这个对象。 由于我有很多Enum的,我不能明确地检查每一个,所以我希望有一个更通用的方法来完成这个。

使用IsEnum属性:

 if(objectType.IsEnum) { return true; } 

Type.IsEnum是你正在寻找

我完全误解了这个问题,因为太过于关注[Description],所以如果你想要检查一个特定的枚举是否有[description]属性(如果json在没有的时候抛出一个fit),这是一种可能的方法来检查:

 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; } }