Как получить имя свойства и значение из динамического объекта C # при использовании CsvHelper? - PullRequest
7 голосов
/ 15 мая 2019

Я использую CsvHelper для чтения файлов CSV в объект Dynamic C #, и я хотел бы повторить List<dynamic>, используя foreach и получить имена и значения свойств.

FileInfo file = new FileInfo("C:\\Temp\\CSVTest.csv");

List<dynamic> dynObj;

using (var reader = new StreamReader(file.FullName))
using (var csv = new CsvReader(reader))
{
    dynObj = csv.GetRecords<dynamic>().ToList();

    foreach (var d in dynObj)
    {
        var properties = d.GetType().GetProperties();
        foreach (var property in properties)
        {
            var PropertyName = property.Name;
            var PropetyValue = d.GetType().GetProperty(property.Name).GetValue(d, null);
         }
     }
 }

var properties = d.GetType().GetProperties(); всегда возвращать0 но я вижу при отладке, что есть свойства.

enter image description here

Файл CSV содержит эти данные:

Id,Name,Barnd
1,one,abc
2,two,xyz

1 Ответ

5 голосов
/ 15 мая 2019

Обычно тип dynamic имеет объект типа System.Dynamic.ExpandoObject при его использовании. Это так же, как тип KeyValuePair в C#.

Следующее решение вернет список ключей и значений типа dynamic.

using (var csv = new CsvReader(reader))
{
    dynObj = csv.GetRecords<dynamic>().ToList();

    foreach (var d in dynObj)
    {
        var obj = d as System.Dynamic.ExpandoObject;

        if (obj != null)
        {
            var keys = obj.Select(a => a.Key).ToList();
            var values = obj.Select(a => a.Value).ToList();
        }
    }
}
...