[英]Serialize dynamic list to CSV without header in Servicestack.Text
I'm trying to generate a csv file using CsvSerializer.SerializeToCsv(data)
, but I want to omit the headers.我正在尝试使用
CsvSerializer.SerializeToCsv(data)
生成 csv 文件,但我想省略标题。
I read this question , but this is not working as I'm using a list of dynamic objects.我读了这个问题,但这不起作用,因为我正在使用动态对象列表。
I've tried:我试过了:
IEnumerable<dynamic> data = ...;
CsvConfig<object>.OmitHeaders = true;
string csvFile = CsvSerializer.SerializeToCsv(data);
And和
IEnumerable<dynamic> data = ...;
CsvConfig<dynamic>.OmitHeaders = true;
string csvFile = CsvSerializer.SerializeToCsv(data);
Both options are serializing the csvFile with headers, which I don't need.这两个选项都用我不需要的标题序列化 csvFile。
Since I didn't find a way with a library, I opt to do this manually.由于我没有找到使用库的方法,因此我选择手动执行此操作。 Something like this worked for me:
像这样的东西对我有用:
var parsedData = new List<string>();
// parse data into comma separated objects
parsedData.AddRange(data.Select(d =>
{
var dProperties = (IDictionary<string, object>)d;
var valuesFixed = dProperties.Values.Select(v => v.ToString().ToRFC4180String());
return string.Join(",", valuesFixed);
}));
var file = string.Join("\r\n", parsedData);
Where FillInnerQuotes is just an extensor method to manage special characters based on rfc4180 standard.其中 FillInnerQuotes 只是一种基于 rfc4180 标准管理特殊字符的扩展方法。
public static string ToRFC4180String(this string value)
{
if(value.Contains("\""))
value = value.Replace("\"", "\"\"");
if(value.Contains("\"")
|| value.Contains("\n")
|| value.Contains("\r")
|| value.Contains("\r\n")
|| value.Contains(","))
return $"\"{value}\"";
return value;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.