I am working on the Reflection , but i am stuck while doing the recursion.
Code :
public class User {
public string Name;
public int Number;
public Address Address;
}
public class Address {
public string Street;
public string State;
public string Country;
}
now i am printing the values.
Type t = user.GetType();
PropertyInfo[] props = t.GetProperties();
foreach (PropertyInfo prp in props)
{
if(!prp.GetType().IsPrimitive && prp.GetType().IsClass)
{
// Get the values of the Inner Class.
// i am stucked over here , can anyone help me with this.
Type ty = prp.GetType();
var prpI = ty.GetProperties();
//var tp = ty.GetType().;
foreach (var propertyInfo in prpI)
{
var value = propertyInfo.GetValue(prp);
var stringValue = (value != null) ? value.ToString() : "";
console.WriteLine(prp.GetType().Name + "." + propertyInfo.Name+" Value : " +stringValue);
}
}
else
{
var value = prp.GetValue(user);
var stringValue = (value != null) ? value.ToString() : "";
console.writeline(user.GetType().Name + "." + prp.Name+" Value : " +stringValue);
}
}
i want to know how to find out whether the property is a class or the primitive. and do the recursion if it is a class.
First of all, if you want to access the properties of a type, ensure you are using a type which has properties:
Second,
prp.GetType()will always returnPropertyInfo. You are looking forprp.PropertyType, which will return the Type of the property.Also,
if(!prp.GetType().IsPrimitive && prp.GetType().IsClass)won’t work the way you want, becauseStringe.g. is a class and also not a primitive. Better useprp.PropertyType.Module.ScopeName != "CommonLanguageRuntimeLibrary".Last but not least, to use recursion, you actually have to put your code into a method.
Here’s a complete example:
Used like this:
it will output