The other day I ran into the need to access a nested property on an object with the actual name and path to the property stored in a string variable. For example I had a mail object and wanted to access "From.DisplayName" which was stored in a string. If I was access just the from I could have used something like this:
PropertyInfo pi = myObject.GetType().GetProperties();
foreach (PropertyInfo item in pi)
if (item.Name = "From")
object o = item.GetValue(myObject, null);
In this example myObject is the mail object and we first get the type of it, and then get an array of the properties for that type. Finally we find the From property and get the value for that property on our object.
Unfortunately this doesn't work for nested properties and I could not find a built in way to do it so I built a recursive function to handle getting the property for me and returning it. I then packaged it into a handy .Net 3.5 extension method. Let me know if you know of a built in method to get a nested property, otherwise feel free to using the extension method I put together, though it probably needs a bit of refactoring before you put it into production.
Type t, Object o, String Property)
object myObject = null;
PropertyInfo pi = t.GetProperties();
if (Property.IndexOf(".") != -1)
if (item.Name == Property.Substring(0, Property.IndexOf(".")))
object tmpObj = item.GetValue(o, null);
myObject = tmpObj.GetType().GetNestedProperty(tmpObj, Property.Substring(Property.IndexOf(".") + 1));
if (item.Name == Property)
myObject = item.GetValue(o, null);
The opinions expressed herein are my own personal opinions and do not represent
my employer's view in any way.