新手使用CSVHelper与AutoMapper遇No members mapped错误求助
解决CSVHelper「No members are mapped for type 'BOLDto'」错误
针对你遇到的问题,按以下步骤排查解决:
1. 确认CSV表头与BOLDto的[Name]属性完全匹配
打开你的CSV文件,核对每一个表头字段:
- 必须和BOLDto类中
[Name("XXX")]里的字符串完全一致,包括大小写、拼写、是否带空格或特殊符号。比如你BOLDto里写的是[Name("BOLNumber")],CSV表头就不能是BolNumber、BOL Number或者BOL_Number。 - 如果表头有多余的空格,要么修改CSV表头,要么给[Name]属性加上对应的空格,比如
[Name("BOL Number")]。
2. 检查CSV分隔符是否正确
你代码里设置的分隔符是制表符(\t):
csvr.Configuration.Delimiter = "\t";
如果你的CSV文件实际是用逗号(,)或者其他符号分隔的,这个设置就会导致CSVHelper读不到正确的字段。可以改成自动检测分隔符:
csvr.Configuration.DetectDelimiter = true;
或者直接改成对应分隔符,比如逗号分隔就写csvr.Configuration.Delimiter = ",";。
3. 确认[Name]属性的命名空间正确
BOLDto类里的[Name]属性必须来自CSVHelper的正确命名空间,在类文件顶部添加:
using CsvHelper.Configuration.Attributes;
如果没加这个命名空间,[Name]属性不会被CSVHelper识别,自然找不到映射的成员。
4. 调试查看实际读取的表头
在代码中添加调试代码,打印出CSVHelper读取到的表头,方便对比排查:
using (var reader = new StreamReader(BolCsv.OpenReadStream())) using (var csvr = new CsvReader(reader, System.Globalization.CultureInfo.CurrentCulture)) { csvr.Configuration.Delimiter = "\t"; csvr.Configuration.HeaderValidated = null; csvr.Configuration.MissingFieldFound = null; // 新增调试代码,查看读取到的表头 csvr.Read(); csvr.ReadHeader(); var headers = csvr.HeaderRecord; // 可以把headers输出到控制台或者日志,比如: foreach (var header in headers) { Console.WriteLine($"表头字段:{header}"); } var bolDtos = csvr.GetRecords<BOLDto>().ToList(); // ... 后续代码 }
对比输出的表头和BOLDto的[Name]属性,就能快速找到不匹配的地方。
额外提醒:AutoMapper的字段大小写问题
BOL类里的字段是ProductId(小写d),而BOLDto里是ProductID(大写D),虽然AutoMapper默认大小写不敏感,但为了避免后续映射出错,建议要么保持字段名大小写一致,要么在AutoMapper配置里明确映射规则。
内容的提问来源于stack exchange,提问作者Rockets23
相关产品推荐
相关产品推荐

