I am trying to build an object through an attribute on a classes property that specifies a column in a supplied data row that is the value of the property, as below:
[StoredDataValue('guid')] public string Guid { get; protected set; } [StoredDataValue('PrograGuid')] public string ProgramGuid { get; protected set; }
In a Build() method on a base object, I am getting the attribute values set on these properties as
MemberInfo info = GetType(); object[] properties = info.GetCustomAttributes(true);
However, at this point I am realising the limitation in my knowledge.
For a start, I don’t appear to be getting back the correct attributes.
And how do I set these properties through reflection, now that I have the attributes? Am I doing / thinking something fundamentally incorrect?
There are a couple of separate issues here
typeof(MyClass).GetCustomAttributes(bool)(orGetType().GetCustomAttributes(bool)) returns the attributes on the class itself, not the attributes on members. You will have to invoketypeof(MyClass).GetProperties()to get a list of properties in the class, and then check each of them.Once you got the property, I think you should use
Attribute.GetCustomAttribute()instead ofMemberInfo.GetGustomAttributes()since you exactly know what attribute you are looking for.Here’s a little code snippet to help you start:
EDIT: Don’t forget that
Type.GetProperties()only returns public properties by default. You will have to useType.GetProperties(BindingFlags)to get other sorts of properties as well.