我正在尝试编写一个程序,将CSV文件加载到我创建的自定义类中。为此,我使用以下库:http://joshclose.github.io/CsvHelper/#mapping
我编写了我的实体类,如下所示:
public class BreakthroughCampaignEntity
{
public string ConstituentId { get; set; }
public string F2F { get; set; }
public string GiftStatus { get; set; }
public string Title1 { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public string PreferredAddress { get; set; }
public string PreferredSuburb { get; set; }
public string PreferredEmailNumber { get; set; }
public string PreferrredHomeNumber { get; set; }
public string PreferredWorkNumber { get; set; }
public string PreferrredMobileNumber { get; set; }
public string GiftAmount { get; set; }
public DateTime GiftNextTransactionDueDate { get; set; }
public DateTime GiftSpecificAttributesPledgeGiftSignUpDate { get; set; }
}
我的索引映射:
public class BreakthroughCampaignIndexMap : CsvClassMap<BreakthroughCampaignEntity>
{
/// <summary>
/// Creates a map by matching the CSV indexes to our entity class
/// </summary>
public override void CreateMap()
{
Map(m => m.ConstituentId).Index(0).Default("Unknown");
Map(m => m.F2F).Index(1).Default("Unknown");
Map(m => m.GiftStatus).Index(2).Default("Unknown");
Map(m => m.Title1).Index(3).Default("Unknown");
Map(m => m.FirstName).Index(4).Default("Unknown");
Map(m => m.Surname).Index(5).Default("Unknown");
Map(m => m.PreferredAddress).Index(6).Default("Unknown");
Map(m => m.PreferredSuburb).Index(7).Default("Unknown");
Map(m => m.PreferredEmailNumber).Index(8).Default("Unknown");
Map(m => m.PreferrredHomeNumber).Index(9).Default("Unknown");
Map(m => m.PreferredWorkNumber).Index(10).Default("Unknown");
Map(m => m.PreferrredMobileNumber).Index(11).Default("Unknown");
Map(m => m.GiftAmount).Index(12).Default("Unknown");
Map(m => m.GiftNextTransactionDueDate).Index(13);
Map(m => m.GiftSpecificAttributesPledgeGiftSignUpDate).Index(14);
}
}
我还通过包管理器控制台安装了CSV帮助程序库,以确保我拥有最新版本。
不幸的是,当我去加载我的CSV时,使用以下内容:
var csv = new CsvReader(TextFileToProcess.Text.ToString());
var processedFile = csv.GetRecords<BreakthroughCampaignEntity>();
在this StackExchange帖子中引用(Josh Close回答)我在TextFileToProcess.Text.ToString()
下面收到以下错误:
无法解析构造函数'CsvReader(string)',候选人是: CsvReader(CsvHelper.ICsvParser)(在CsvReader类中) CsvReader(System.IO.TextReader)(在类CsvReader中)
我也尝试过使用:
var csv = new CsvReader(File.OpenRead(TextFileToProcess.Text.ToString()));
提供相同的错误。
我很想知道这意味着什么,而不仅仅是如何解决它!我的知识有一些差距,这意味着虽然这个错误似乎表明如何解决问题,但我不明白它告诉我的是什么。
答案 0 :(得分:4)
错误消息表示没有CsvReader
的构造函数,它将csv文本作为参数。然后,错误会告诉您可以使用哪些构造函数来帮助您找出正确的构造函数。
这个实例采用ICsvParser
:
CsvReader(CsvHelper.ICsvParser) (in class CsvReader)
这个可能是你最好的选择,需要TextReader
。
CsvReader(System.IO.TextReader) (in class CsvReader)
如果你有文件名,你可以这样做:
new CsvReader(File.OpenText(filePath));
如果您只有csv文本,则可以创建StringReader
:
new CsvReader(StringReader(TextFileToProcess.Text.ToString()));
答案 1 :(得分:2)
错误消息中显示的CsvReader的第二个构造函数的参数类型为System.IO.TextReader。因此,我认为你应该能够使用这个:
var csv = new CsvReader(File.OpenText(filePath));
其中filePath是一个字符串,其中包含您要打开的文件的路径。您似乎正在尝试为构造函数提供一个参数,该参数是一个文件的文本字符串,但它似乎没有构造函数。
Look at the example in the documentation for TextReader class