Предположим, у меня есть следующие классы:
public class Foo
{
public string Reference { get; set; }
public CompanyModel Company { get; set; }
public CallDataModel CallData { get; set; }
}
public class CompanyModel
{
public string Name { get; set; }
}
public class CallDataModel
{
public IEnumerable<CallModel> Item { get; set; }
}
public class CallModel
{
public string Name { get; set; }
public int Value { get; set; }
}
Используя отражение, пожалуйста, кто-нибудь может помочь мне перебрать все свойства, включая коллекцию IEnumerable .
Я бы хотел чтобы иметь возможность отобразить каждое имя свойства и соответствующее значение в рекурсивном методе.
Например;
public void GetPropertiesRescursively<T>(this T model)
{
foreach (PropertyInfo prop in model.GetType().GetProperties())
{
// Do something
}
}
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Это похоже на то, что я пытаюсь достичь, однако я не уверен насчет итерации IEnumerable.
public static List<String> GetPropertiesRescursively<T>(this T model)
{
List<String> result = new List<String>();
BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
foreach (PropertyInfo prop in model.GetType().GetProperties(flags))
{
string className = model.GetType().Name;
string propertyName = prop.Name;
object propertyValue = model.GetType().GetProperty(propertyName).GetValue(model, null);
if (prop.PropertyType.IsClass)
{
GetPropertiesRescursively(propertyValue);
}
else
{
if (prop.PropertyType.GetInterfaces().Contains(typeof(IEnumerable)))
{
foreach (PropertyInfo otherProp in (IEnumerable)prop.GetType().GetProperties(flags))
{
GetPropertiesRescursively(otherProp);
}
}
else
{
// Show property name and value e.g. SomeClass.SomeProperty=1
result.Add(string.Format("{0}.{1}={2}", className, propertyName, propertyValue));
}
}
};
return result;
}