基于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它只是保持无效.... 关于为什么会出现这种情况的任何线索?
答案 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
。