如何配置FileHelper使CSV的Descrizione字段支持多行内容?
解决FileHelper读取含换行字段的CSV问题
针对你遇到的字段包含换行导致读取错误的问题,可以通过以下两种方式解决:
方法一:指定记录结束标志(无需修改CSV)
修改实体类,添加[RecordEndsWith]属性,告诉FileHelper以#加换行(或仅#)作为记录的结束标识,这样引擎会自动读取字段内的换行内容,直到遇到记录结束符才分割记录:
[IgnoreFirst(1)] [DelimitedRecord("#")] // 兼容带换行和不带换行的记录结尾 [RecordEndsWith(new string[] { "#\r\n", "#" })] public class PrezElementi { public int idElemento { get; set; } public string? Descrizione { get; set; } }
原理:默认情况下FileHelper以换行作为记录分隔符,添加该属性后,引擎会将从一个记录开始到#\r\n或#之间的内容视为完整记录,即使字段内包含换行也不会误分割。
方法二:给字段添加引号(需修改CSV)
如果可以调整CSV格式,将包含换行的Descrizione字段用引号包裹,然后在实体类字段上添加[FieldQuoted]属性:
修改后的CSV示例:
#123#"line A"# #456#"line B end line B"# #789#"line C"#
修改后的实体类:
[IgnoreFirst(1)] [DelimitedRecord("#")] public class PrezElementi { public int idElemento { get; set; } [FieldQuoted] public string? Descrizione { get; set; } }
原理:[FieldQuoted]会让FileHelper识别引号内的内容为完整字段,忽略其中的换行符,避免误将字段内的换行当成记录分隔符。
内容的提问来源于stack exchange,提问作者Fabrizio Ciavatta
相关产品推荐
相关产品推荐

