CsvHelper:.Net的开源CSV文件处理库
CsvHelper是Google搜索排名第一的CSV文件处理库(针对C#/.Net)。
- 安装
- 打开VisualStudio的Package Management Console
- 输入如下命令:Install-Package CsvHelper
- 映射
- 创建CSV文件的列(根据列名或列的序号)到C#对象的属性(Property)的映射(Map)
- 只支持到属性(Property)的映射,不支持字段(Field)
- 具体映射的例子请参考:https://github.com/JoshClose/CsvHelper/wiki/Fluent-Class-Mapping
- 支持列到属性的自定义转换,基本类型是自动转换的
- 日期时间类型(Datetime)可以设定格式(Format)来支持非标准格式的字符串,比如将“20150401”转为日期时间类型:
Map(m => m.TimeToMarket).Name("timeToMarket").TypeConverterOption("yyyyMMdd");
- 配置
- 正式读取CSV文件之前需要制定文件编码(Encoding),是否有列头(HasRecordHeader)
- 重要的是注册之前自定义的【映射】,否则会出现“No properties are mapped for type”的异常。
CsvHelper.Configuration.CsvConfiguration configuration = new CsvHelper.Configuration.CsvConfiguration(); configuration.Encoding = System.Text.Encoding.UTF8; configuration.HasHeaderRecord = true; configuration.RegisterClassMap<StockCsvClassMap>();
- 注意利用C#的Attribute指定映射的方式在CsvHelper 2.0之后已经被弃用了
[CsvField( Name = "String Field" )]
- 解析
- 首先从待解析的文件创建一个CsvParser,并指定解析用的【配置】
CsvHelper.Configuration.CsvConfiguration configuration = new CsvHelper.Configuration.CsvConfiguration(); configuration.Encoding = System.Text.Encoding.UTF8; configuration.HasHeaderRecord = true; configuration.RegisterClassMap<StockCsvClassMap>();
- CsvParser创建一个CsvReader
CsvHelper.CsvReader csvReader = new CsvHelper.CsvReader(csvParser);
- 可以分行读取,然后解析成一个对象
csvReader.Read(); var stock = csvReader.GetRecord<Stock>();
- 也可以一次读取解析全部对象
var stocks = csvReader.GetRecords<Stock>();
- 首先从待解析的文件创建一个CsvParser,并指定解析用的【配置】