c# - PropertyInfo.GetValue 返回枚举常量名称而不是值

标签 c# reflection

我正在构建一个使用反射来构建序列化数据的序列化组件,但是我从枚举属性中得到了奇怪的结果:

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/

相关文章:

c# - 使用 BinarySecurityToken 通过 X.509 证书保护 WCF

asp.net - 使用带有代码隐藏的网络表单通过反射引发事件

java - 为什么 getmethod 返回 null 即使该方法存在

java - 这个反射式 Java 例程可以加速吗?

c# - 带队列的异步/同步并发调用

c# - 我怎样才能找出一个类创建了多少个对象

c# - 面向 Java 开发人员的 iPhone 的 Objective-C : Books, 站点、视频?

c# - 从 FTP 目录读取文件夹路径到 IEnumerable

c# - 从资源加载的程序集引发无法加载文件或程序集

java - 通过从注释属性获取的路径实例化对象