CsvReaderException未处理

10

我一直遇到这个错误:

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

附加信息:类型“RPS_String_Parse.Program+FormattedRow”的属性未映射。

但是我相信我正在正确地遵循文档。在参考“入门”部分后,我实现了以下内容:

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; set;}。你还需要做其他什么来解决这个问题吗? - Ofri Harlev
1
只需将其设置为属性即可,但它必须是公共属性。如果所有属性都标记为内部或私有,则会导致相同的错误消息。 - Richard J Foster
1
根据我的经验,AutoMapper 似乎需要 CSV 标头与字段名称匹配,而不是按索引映射。 - scotru
2个回答

13
文档说明它将映射到Properties。你的类有Fields。进行以下更改:

文档说明它将映射到Properties。你的类有Fields。进行以下更改:

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

这将把您的字段更改为 "自动属性"。


1
你需要设置映射的配置选项:
var generatedMap = csv.Configuration.AutoMap<MyClass>();

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

编辑:Jon B说得对。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接