This sounds like job for attributes. You can use an attribute to decorate your properties with the exact header information you want. For example:
<Description("Endereço")> _
Public Property String Endereco ....
And then use reflection to pull that value out in code. You can also use the attribute value as a key into a localization table, to make future translation to other languages easier as well, or use other attributes to do things like tell your view not so show a particular field in certain circumstances.
To answer your reflection question, I'm assuming you're already at least a little comfortable with it, as that's how you have to iterate over an object's properties (unless what you really have is a dictionary, in which case you should have said so). So as you're iterating over the properties the objects you're working with are of type PropertyInfo
, and you can call the GetCustomAttributes()
method for that type to find any attributes associated with the property.