Единственным способом, который я нашел, было проверить, какие интерфейсы реализует класс, и проверить атрибуты свойства (если они существуют) на этих интерфейсах, например, (примечание - общий подход проверен, но сам код является специальным и может не компилироваться:)
static bool HasAttribute (PropertyInfo property, string attribute) {
if (property == null)
return false;
if (GetCustomAttributes ().Any (a => a.GetType ().Name == attribute))
return true;
var interfaces = property.DeclaringType.GetInterfaces ();
for (int i = 0; i < interfaces.Length; i++)
if (HasAttribute (interfaces[i].GetProperty (property.Name), attribute))
return true;
return false;
}
Вероятно, вы можете принять его к таким же легким методам.