【发布时间】:2021-04-14 15:45:08
【问题描述】:
首先,为了避免下意识的“这是重复的” 语句:关于序列化枚举有很多关于 SO 的问题。但是没有一个(我发现)处理具有描述的枚举,或者尝试将枚举转换为特定对象的枚举。 (如果你能找到我错过的一个,那么我会接受这是重复的。)
给定一个看起来像这样的枚举:
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 扩展,所以我不需要帮助。我遇到的问题是thisEnum1 和thisEnum2 最终的值都是0
(DistrictType 是 Enum 的真实名称。)
如何获得枚举的实际实例,然后可以循环访问?
【问题讨论】:
-
可以使用
Enum.GetValues<T>()获取枚举的值。 -
如我所见,您需要Enum.GetValues<T>()。然后,可以迭代所有枚举值,收集描述属性,序列化为json。
-
但是你确实得到了一个枚举实例。
0只是每个枚举类型的默认值。您实际上也不需要枚举的 instance 来遍历字段。