samedi 31 août 2019

Using reflection to iterate a class with nested classes

I found this answer here at SO, Get nested property values through reflection C#, though it also tries to dump e.g. a string's properties, which then throws an exception.

My classes look like this

public class MyModels
{
    public int Id { get; set; }
    public DateTime EditDate { get; set; }
    public string EditBy { get; set; }
}

public class Person
{
    public string Name { get; set; }
}

public class Organization
{
    public Person Person { get; set; }
    public Organization()
    {
        Person = new Person();
    }

    public string Name { get; set; }
}

public class Company : MyModels
{
    public Organization Organization { get; set; }
    public Company()
    {
        Organization = new Organization();
    }

    public string Description { get; set; }
}

And here's the code from the linked answer

var objtree = "";
void DumpObjectTree(object propValue, int level = 0)
{
    if (propValue == null)
        return;

    var childProps = propValue.GetType().GetProperties();
    foreach (var prop in childProps)
    {
        var name = prop.Name;
        var value = prop.GetValue(propValue, null);

        // add some left padding to make it look like a tree
        objtree += ("".PadLeft(level * 4, ' ') + $"{name} = {value}") + Environment.NewLine;

        // call again for the child property
        DumpObjectTree(value, level + 1);
    }
}
DumpObjectTree(itemData);


How do I make it to not try to dump properties on string, datetime, etc.?





Aucun commentaire:

Enregistrer un commentaire