I want to use reflection to get the AttributeName of an XMLAttribute.
public class Rate{
[XmlAttribute(AttributeName = "roomcode")]
public string Code { get; set; }
}
When I do:
var rate = typeof(Rate).GetProperty("Code").GetCustomAttributes(true);
I can see that there is a property on the object rate with AttributeName "roomcode", but no matter what I try, I can't seem to access it.
I want to do a unit test where I compare the attributenames on my object to the attributenames of an xml node.
CodePudding user response:
GetCustomAttributes returns an object[], so you need to cast to XmlAttributeAttribute to access the AttributeName property.
One way would be to use LINQ Cast and Single:
var rate = typeof(Rate)
.GetProperty("Code")
.GetCustomAttributes(true)
.Cast<XmlAttributeAttribute>()
.Single()
.AttributeName;
But it would be more concise to use the GetCustomAttribute<T> extension method, which obtains a single attribute of the given type T:
var rate = typeof(Rate)
.GetProperty("Code")
.GetCustomAttribute<XmlAttributeAttribute>(true)
.AttributeName;
As an aside, you could also use nameof when obtaining the PropertyInfo to improve type safety:
var rate = typeof(Rate)
.GetProperty(nameof(Rate.Code))
.GetCustomAttribute<XmlAttributeAttribute>(true)
.AttributeName;

