我正在构建一个使用反射来构建序列化数据的序列化组件,但是我从枚举属性中得到了奇怪的结果:
enum eDayFlags
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public eDayFlags DayFlags { get; set; }
现在进行真正的测试
Obj Test = new Obj();
Test.DayFlags = eDayFlags.Friday;
然后序列化的输出是:
DayFlags=Friday
但是如果我在我的变量中设置两个标志:
Obj Test = new Obj();
Test.DayFlags = eDayFlags.Friday;
Test.DayFlags |= eDayFlags.Monday;
然后序列化的输出是:
DayFlags=34
我在序列化组件中所做的非常简单:
//Loop each property of the object
foreach (var prop in obj.GetType().GetProperties())
{
//Get the value of the property
var x = prop.GetValue(obj, null).ToString();
//Append it to the dictionnary encoded
if (x == null)
{
Properties.Add(HttpUtility.UrlEncode(prop.Name) + "=null");
}
else
{
Properties.Add(HttpUtility.UrlEncode(prop.Name) + "=" + HttpUtility.UrlEncode(x.ToString()));
}
}
谁能告诉我如何从 PropertyInfo.GetValue 获取变量的真实值,即使它是一个枚举并且只有一个值?
谢谢
最佳答案
您正在得到真正的值(value)——它只是转换为一个字符串,它没有按照您的预期进行。 prop.GetValue
返回的值将是装箱的 eDayFlags
值。
你想要枚举中的数值吗?将其转换为 int
。您可以将枚举值拆箱为其基础类型。
请注意,您的枚举 - 可能应称为 Days
- 应该对其应用 [Flags]
,因为它是标志枚举。
关于c# - PropertyInfo.GetValue 返回枚举常量名称而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11953423/