J'écris un JsonConverter pour Json.NET qui devrait me permettre de convertir n'importe quel enum en une valeur de chaîne définie par un attribut [Description].
Par exemple:
public enum MyEnum {
[Description("Sunday")] Sunday,
[Description("Monday")] Monday,
[Description("Tuesday")] Tuesday,
[Description("Wednesday")] Wednesday,
[Description("Thursday")] Thursday,
[Description("Friday")] Friday,
[Description("Saturday")] Saturday
}
J'ai déjà le code pour supporter myEnum.Description()
qui retournera évidemment sa description de chaîne.
Dans l'implémentation JsonConverter, il existe cette méthode:
public override bool CanConvert(Type objectType)
{
}
J'essaie de comprendre comment déterminer si objectType
est un Enum
et renvoyer true afin que le convertisseur sache qu'il peut convertir cet objet. Comme j'ai beaucoup de Enum
, je ne peux pas vérifier explicitement chacun d'eux, alors j'espérais un moyen plus générique d'accomplir cela.
Utilisez la propriété IsEnum
:
if(objectType.IsEnum) {
return true;
}
Type.IsEnum est ce que vous recherchez
J'ai complètement mal interprété la question en me concentrant trop sur la [Description], donc si vous voulez vérifier si une énumération particulière a un attribut [description] ou non (dans le cas où JSON réagit alors qu'il n'y en a pas), c'est un moyen possible de vérifier cela:
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;
}
}