如何解决你如何实现和 nullBadDataFound
根据 CsvHelper 入门中的说明,除了 csv.Configuration.BadDataFound 行之外,我还有以下代码:
using (var csv = new CsvReader(tr,CultureInfo.InvariantCulture))
{
List<string> badPeople = new List<string>();
csv.Configuration.BadDataFound = context => badPeople.Add(context.RawRecord);
try
{
var people = csv.GetRecords<Person>();
var count = people.Count();
response = await Http.PostAsJsonAsync("api/people/batch",people);
Message = $"{response}: {selectedFile.Count} file uploaded";
}
catch (Exception ex)
{
Message = ex.Message;
}
}
我根据以下建议配置了 BadDataFound 行:
- Handling bad CSV records in CsvHelper
- CSVHelper: logging errors when BadDataException is thrown
- CSVHelper BadDataFound in a valid csv 以及许多其他人。
在 CsvHelper.Configuration 文档中,它指出:
获取或设置发现错误字段数据时调用的函数。如果字段包含引号并且该字段没有被引用(转义),则该字段具有错误数据。您可以提供自己的函数来执行其他操作,例如记录问题而不是抛出异常。参数:上下文
我不断收到 BadDataFound 没有设置器的错误,根据我在 GitHub 上查看代码时看到的内容,这是有道理的。我在没有 BadDataFound 行的情况下运行时收到的错误消息指出,可以通过将 BadDataFound 置空来忽略它。
更复杂的是,在我能找到的上下文中也没有“RawRecord”。
我如何让它发挥作用?
解决方法
在 Version 20.0.0 中,Josh “将 CsvConfiguration 更改为只读记录以消除线程问题。”您需要提前创建配置并将其传递到 CsvReader
/CsvWriter
。
RawRecord
现在在解析器上。
然而,我注意到它会创建一条记录,即使有错误数据,它也会将 RawRecord
两次输入 badPeople
。
void Main()
{
var badPeople = new List<string>();
var Message = string.Empty;
var people = new List<Person>();
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
BadDataFound = arg => badPeople.Add(arg.Context.Parser.RawRecord)
};
using (var tr = new StringReader("Id,FirstName,LastName\n1,Foo,Bar\n2,Foo\"Bar,Baz\n3,Foo\"Baz,Bar"))
using (var csv = new CsvReader(tr,config))
{
try
{
people = csv.GetRecords<Person>().ToList();
var count = people.Count();
}
catch (Exception ex)
{
Message = ex.Message;
}
}
people.Dump();
badPeople.Dump();
}
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。