繁体   English   中英

将枚举转换为列表<object><div id="text_translate"><p>首先,为了避免下意识的<em>“这是重复的”</em>陈述:关于序列化枚举有很多关于 SO 的问题。 但没有一个(我发现)处理具有描述的枚举,或者尝试将枚举转换为特定的 object。 (如果你能找到我错过的一个,那么我会接受这是重复的。)</p><p> 给定一个看起来像这样的枚举:</p><pre> public enum OptionType { [Description("Option A")] OptionA = 1, [Description("Option B")] OptionB = 2, Description("Option C")] OptionC= 3, }</pre><p> 我想将其转换为 JSON 字符串,如下所示:</p><pre> [ { "Id": "1", "Description": "Option A"}, { "Id": "2", "Description": "Option B"}, { "Id": "3", "Description": "Option C"} ]</pre><p> 我有这两个类:</p><pre> public class EnumList { public List&lt;EnumNameValue&gt; EnumNamesValues { get; set; } } public class EnumNameValue { public int Id { get; set; } public string Description { get; set; } }</pre><p> 我有一个看起来像这样的调用方法:</p><pre> EnumList enumList = EnumSerializer.EnumToJson&lt;OptionType&gt;();</pre><p> 最后(这是我需要帮助的地方):</p><pre> public static class EnumSerializer { public static EnumList EnumToJson&lt;T&gt;() where T: Enum { Type enumType = typeof(T); // &lt;--- WORKS.; Enum thisEnum1 = (T)Activator.CreateInstance(enumType); // &lt;--- DOES NOT WORK Enum thisEnum2 = (Enum)Activator,CreateInstance(enumType); // &lt;--- DOES NOT WORK // If I can get this far, I *THINK* I can figure it out from here } }</pre><p> 我已经有一个获取描述的 Enum 扩展,所以我不需要帮助。 我遇到的问题是thisEnum1和thisEnum2最终的值为0</p><p> <a href="https://i.stack.imgur.com/zRatA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/zRatA.png" alt="在此处输入图像描述"></a></p><p> ( DistrictType是 Enum 的真实名称。)</p><p> 如何获得可以循环的枚举的实际实例?</p></div></object>

[英]Convert an Enum to a List<object>

首先,为了避免下意识的“这是重复的”陈述:关于序列化枚举有很多关于 SO 的问题。 但没有一个(我发现)处理具有描述的枚举,或者尝试将枚举转换为特定的 object。 (如果你能找到我错过的一个,那么我会接受这是重复的。)

给定一个看起来像这样的枚举:

public enum OptionType
{
    [Description("Option A")]
    OptionA = 1,

    [Description("Option B")]
    OptionB = 2,

    Description("Option C")]
    OptionC= 3,
    }

我想将其转换为 JSON 字符串,如下所示:

[
    { "Id": "1", "Description": "Option A"},
    { "Id": "2", "Description": "Option B"},
    { "Id": "3", "Description": "Option C"}
]

我有这两个类:

public class EnumList
{
    public List<EnumNameValue> EnumNamesValues { get; set; }
}

public class EnumNameValue
{
    public int Id { get; set; }
    public string Description { get; set; }
}

我有一个看起来像这样的调用方法:

EnumList enumList = EnumSerializer.EnumToJson<OptionType>();

最后(这是我需要帮助的地方):

public static class EnumSerializer
{
    public static EnumList EnumToJson<T>() where T : Enum
    {
        Type enumType = typeof(T);                                 // <--- WORKS!!
        Enum thisEnum1 = (T)Activator.CreateInstance(enumType);    // <--- DOES NOT WORK
        Enum thisEnum2 = (Enum)Activator.CreateInstance(enumType); // <--- DOES NOT WORK

        // If I can get this far, I *THINK* I can figure it out from here
   
    }
}

我已经有一个获取描述的 Enum 扩展,所以我不需要帮助。 我遇到的问题是thisEnum1thisEnum2最终的值为0

在此处输入图像描述

DistrictType是 Enum 的真实名称。)

如何获得可以循环的枚举的实际实例?

public static class EnumSerializer
{
    public static EnumList EnumToJson<T>() where T : struct, Enum
    {
        var type = typeof(T);
        var values = Enum.GetValues<T>()
            .Select(x => new EnumNameValue
            {
                Id = (int)(object)x,
                Description = type.GetField(x.ToString())
                    .GetCustomAttribute<DescriptionAttribute>().Description
            });

        return new EnumList { EnumNamesValues = values.ToList() };
    }
}

工作示例

Enum.GetValues迭代枚举中声明的常量。

当然你可以用你的扩展方法替换掉Description部分。

暂无
暂无

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

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