【问题标题】:CsvReaderException was unhandled未处理 Csv 阅读器异常
【发布时间】:2014-04-30 18:21:00
【问题描述】:

我一直遇到这个错误:

在 CsvHelper.dll 中发生“CsvHelper.CsvReaderException”类型的未处理异常

附加信息:没有为类型“RPS_String_Parse.Program+FormattedRow”映射任何属性。

但我相信我正确地关注了the documentation。参考“入门”部分后,我实现了这个:

using (var sr = new StreamReader(filePath))
{
    var csv = new CsvReader(sr);
    var records = csv.GetRecords<FormattedRow>();
    foreach (var record in records)
    {
        Console.WriteLine(record.Address1);
    }

    Console.ReadLine();
}

和我的班级:

public class FormattedRow
{
        public string IDOrderAlpha;
        public string IDOrder;
        public string AddressCompany;
        public string Address1;
        public string Address2;
        public string AddressCity;
        public string AddressState;
        public string AddressZip;
        public string AddressCountry;
        public string ShipMethod;
        public string ContactEmail;
        public string ContactName;
        public string ServiceRep;
        public string CustomerPuchaseOrder;
}

我觉得这应该可行,因为文档指出:

自动映射

如果您不提供映射文件,则自动映射将是 用过的。自动映射将按顺序映射您的类中的属性 它们出现在其中。如果属性是自定义类,它会递归映射 该类中的属性按它们出现的顺序排列。如果 自动映射器命中循环引用,它将停止下降 参考分支

我错过了什么?

【问题讨论】:

  • 我遇到了同样的错误,但我有 {get;放;)。您是否需要采取其他措施来解决问题?
  • 只是将其设为对我有用的财产,但它必须是公共财产。如果所有属性都标记为内部或私有,则会导致相同的错误消息。
  • 根据我的经验,AutoMapper 似乎要求 CSV 标头匹配字段名称,而不是按索引映射。

标签: c# csvhelper


【解决方案1】:

文档声明它将映射到Properties。你的班级有Fields。进行此更改:

public class FormattedRow
{
    public string IDOrderAlpha { get; set; }
    // add { get; set; } for all
}

这会将您的字段更改为“自动属性”。

【讨论】:

    【解决方案2】:

    您需要设置映射的配置选项:

    var generatedMap = csv.Configuration.AutoMap<MyClass>();
    

    所以看来你需要告诉它自动映射。我以前从未使用过这个库。

    编辑: Jon B 成功了。

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 1970-01-01
      • 2016-03-29
      • 2018-05-18
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      相关资源
      最近更新 更多