private static string BindProperty(object property, string propertyName, string format, IFormatProvider provider)
{
string retValue = String.Empty;
if (propertyName.Contains("."))
{
string leftPropertyName = propertyName.Substring(0, propertyName.IndexOf(".", StringComparison.Ordinal));
PropertyInfo[] arrayProperties = property.GetType().GetProperties();
foreach (PropertyInfo propertyInfo in arrayProperties)
{
if (propertyInfo.Name == leftPropertyName)
{
retValue = BindProperty(propertyInfo.GetValue(property, null),
propertyName.Substring(propertyName.IndexOf(".", StringComparison.Ordinal) + 1),
format, provider);
break;
}
}
}
else
{
Type propertyType;
PropertyInfo propertyInfo;
propertyType = property.GetType();
propertyInfo = propertyType.GetProperty(propertyName);
var obj = propertyInfo.GetValue(property, null);
IFormattable fmt = obj as IFormattable;
if (fmt != null)
retValue = fmt.ToString(format, provider);
else
retValue = obj.ToString();
}
return retValue;
}
}