.Resx属性上的.NET GetProperty

时间:2011-03-03 08:33:23

标签: c# asp.net-mvc reflection resources

基于http://www.thinkingguy.net/2010/01/localizing-labelfor-in-aspnet-mvc-2.html

我正在尝试使用反射来获取resx文件中的字符串属性

   var propertyInfo = _resourceType.GetProperty(resourcePropertyName, BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic);

我的MVC2项目中有一个资源文件夹,其中包含一个自动生成属性的资源文件

 public static string Dagrapport_Datum {
            get {
                return ResourceManager.GetString("Dagrapport_Datum", resourceCulture);
            }
        }

无论我传递给GetProperty它只是保持无效.... 关于为什么会出现这种情况的任何线索?

2 个答案:

答案 0 :(得分:3)

您的BindingFlags与该属性的签名不匹配。

你需要BindingFlags.Static | BindingFlags.Public和BindingFlags.GetProperty。

编辑:最好设置BindingFlags.NonPublic。

因此GetProperty()搜索所有Static,Public或NonPublic(内部,私有,受保护)属性。

答案 1 :(得分:1)

如果您将Acces Modifier设置为“Internal”

,这应该有效
var resource = typeof(TestResource).GetProperties(BindingFlags.Static | BindingFlags.NonPublic);
var property = resource.First(x => x.Name == "SomeProperty");

如果您将Acces Modifier设置为“Public”,则可以将NonPublic更改为Public

这也有效:

var someProperty = typeof (TestResource).GetProperty("SomeProperty", BindingFlags.Static | BindingFlags.NonPublic);

在这个例子中,我有一个名为TestResource的资源,其属性为SomeProperty