使用CsvHelper时如何从C#动态对象获取属性名称和值?

AG7*_*G70 7 c# csvhelper

我正在使用CsvHelper将CSV文件读取到Dynamic C#对象中,并且想要迭代List<dynamic>using 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);
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

var properties = d.GetType().GetProperties(); 总是返回0,但是我可以在调试时看到有属性。

在此处输入图片说明

CSV文件包含以下数据:

Id,Name,Barnd
1,one,abc
2,two,xyz
Run Code Online (Sandbox Code Playgroud)

Gau*_*ave 5

通常,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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)