我试图使用反射来确定Type的哪些属性具有某个属性。当我自己创建自定义属性时,这似乎工作正常,但目前不适用于第三方程序集中的属性。
有问题的程序集是SolrNet,属性类型为SolrField
。
带有用法的示例类:
public class PublicDocument : SearchItem {
[SolrField("case")]
public string CaseNumber { get; set; }
[SolrField("case_name")]
public string CaseName { get; set; }
}
这是我获取这些属性的代码。好奇的是property.Attributes是空的! 编辑:再次查看之后,即使使用其他自定义类型,此属性也将为空,并且似乎是为框架属性保留的。
PublicDocument item = new PublicDocument();
foreach (PropertyInfo property in item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) {
foreach (object attribute in property.GetCustomAttributes(typeof(SolrField), true)) {
//do some stuff here
}
}
SolrField在此处定义:https://github.com/mausch/SolrNet/blob/master/SolrNet/Attributes/SolrFieldAttribute.cs
正如我所说,这个相同的代码可以在我自己的一个程序集中定义的属性中工作,并以相同的模式使用。所以我的问题是,可以将属性标记为不通过这样的反射显示,还是会出现另一个问题?
答案 0 :(得分:6)
很难确定。我的第一个猜测是,您可以使用typeof(SolrFieldAttribute)
代替typeof(SolrField)
。