更新 - 这是自 6.0.0 版以来已更改的分隔符问题。默认分隔符现在使用CultureInfo.CurrentCulture.TextInfo.ListSeparator。因为我在美国,所以我的ListSeparator 是,,所以这两个例子都对我有用。对于许多国家/地区,ListSeparator 是 ;,这就是为什么对于 12.3.2 版,只有 1 列用于 @dzookatz。解决方法是在配置中指定分隔符。
csv.Configuration.PrepareHeaderForMatch = header => Regex.Replace(header, @"\/", string.Empty);
csv.Configuration.Delimiter = ",";
我一定错过了什么。无论使用 6.0.0 版还是 12.3.2 版,var record 都会得到相同的结果。我猜你的数据还有更多我没有看到的情况。
版本 6.0.0
class Program
{
static void Main(string[] args)
{
var fooString = $"Id,First/Name{Environment.NewLine}1,David";
using (var reader = new StringReader(fooString))
using (var csv = new CsvReader(reader))
{
csv.Configuration.PrepareHeaderForMatch = header => Regex.Replace(header, @"\/", string.Empty);
csv.Read();
csv.ReadHeader();
while (csv.Read())
{
var record = csv.Context.Record;
}
}
}
}
public class Foo
{
public int Id { get; set; }
public string FirstName { get; set; }
}
版本 12.3.2
public class Program
{
public static void Main(string[] args)
{
var fooString = $"Id,First/Name{Environment.NewLine}1,David";
using (var reader = new StringReader(fooString))
using (var csv = new CsvReader(reader))
{
csv.Configuration.PrepareHeaderForMatch = (header, index) => Regex.Replace(header, @"\/", string.Empty);
csv.Read();
csv.ReadHeader();
while (csv.Read())
{
var record = csv.Context.Record;
}
}
}
}
public class Foo
{
public int Id { get; set; }
public string FirstName { get; set; }
}