List<T> с DisplayName в DataTable

229
12 февраля 2018, 01:14

Добрый день. Имеется следующий код, который хорошо копирует данные из List c DisplayName в DataTable:

    public static DataTable ToDataTable<T>(this IList<T> list)
    {
        var props = TypeDescriptor.GetProperties(typeof(T));
        var table = new DataTable();
        foreach (PropertyDescriptor prop in props)
        {
            if (prop.DisplayName != null)
            {
                table.Columns.Add(prop.DisplayName, Nullable.GetUnderlyingType(prop.PropertyType)
                    ?? prop.PropertyType);
            }
        }
        foreach (T item in list)
        {
            DataRow row = table.NewRow();
            foreach (PropertyDescriptor prop in props)
            {
                row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
            }
            table.Rows.Add(row);
        }
        return table;
    }

Но я не могу додумать, как этот код дописать, если у меня следующая структура списка:

    public class Man
{
    [DisplayName("Имя")]
    public string Name { get; set; }
    [DisplayName("Фамилия")]
    public string Family { get; set; }
    public Info Info { get; set; }
}
public class Info
{
    [DisplayName("Возраст")]
    public string Age { get; set; }
    public bool IsJob { get; set; }
}
public class Program
{
    static void Main(string[] args)
    {
        List<Man> man = new List<Man>();
    }
}

Т.е. мне необходимо дописать мой расширяющий метод так, чтобы в таблицу попали данные и с класса Info с DisplayName. Чтобы DataTable имел колонки: "Имя", "Фамилия" и "Возраст". Внутри не будет списков и прочего. Именно такая структура будет. Списков с DisplayName не будет.

READ ALSO
C# межпроцессное взаимодействие?

C# межпроцессное взаимодействие?

Есть две windows-службы, написанные на C#Первая служит wcf-сервисом для клиентов и обрабатывает всю бизнес-логику

221
Xamarin xlsx как прочитать

Xamarin xlsx как прочитать

Существует библиотека EPPlus (OfficeOpenXml), которая позволяет читать эти файлы, но Xamarin её не поддерживаетСуществуют ли какие либо аналоги для чтения...

222
Пролистывание слайдов в Bootstrap Carousel

Пролистывание слайдов в Bootstrap Carousel

Каким образом сделать, чтобы в компоненте Bootstrap Carousel при просмотре с мобильных девайсов, можно было пролистывать слайды пальцем? Те

272
Символы в javascript

Символы в javascript

как сделать во всем тексте замену[ на

270