[英]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 扩展,所以我不需要帮助。 我遇到的问题是thisEnum1
和thisEnum2
最终的值为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.