【问题标题】:How to get property name and value from C# Dynamic object when using CsvHelper?使用 CsvHelper 时如何从 C# 动态对象中获取属性名称和值?
【发布时间】:2019-05-15 07:25:25
【问题描述】:

我正在使用 CsvHelper 将 CSV 文件读入动态 C# 对象,我想使用 foreach 迭代 List<dynamic> 并获取属性名称和值。

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 但我可以在调试时看到有属性。

CSV 文件包含以下数据:

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

【问题讨论】:

标签: c# csvhelper


【解决方案1】:

通常,dynamic 类型在使用时有一个System.Dynamic.ExpandoObject 类型对象。它与C# 中的KeyValuePairtype 相同。

以下解决方案将返回来自 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();
        }
    }
}

【讨论】:

  • 也可以将其投射到IDictionary&lt;string, object&gt;
  • 非常感谢戴夫!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2020-11-06
  • 2022-08-23
  • 2012-08-26
  • 2013-01-02
相关资源
最近更新 更多