繁体   English   中英

检查给定类型是否为枚举

[英]Check if a given Type is an 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并返回true,以便转换器知道它可以转换此对象。 由于我有许多Enum的,我无法明确地检查每一个,所以我希望有一个更通用的方法来实现这一点。

使用IsEnum属性:

if(objectType.IsEnum) {
    return true;
}

Type.IsEnum是您正在寻找的

我通过过多地关注[描述]来完全误解了这个问题,所以如果你想要检查一个特定的枚举是否具有[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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM