c# - 将动态列表序列化为 CSV,Servicestack.Text 中没有标题
问题描述
我正在尝试使用 生成 csv 文件CsvSerializer.SerializeToCsv(data)
,但我想省略标题。
我读了这个问题,但这不起作用,因为我正在使用动态对象列表。
我试过了:
IEnumerable<dynamic> data = ...;
CsvConfig<object>.OmitHeaders = true;
string csvFile = CsvSerializer.SerializeToCsv(data);
和
IEnumerable<dynamic> data = ...;
CsvConfig<dynamic>.OmitHeaders = true;
string csvFile = CsvSerializer.SerializeToCsv(data);
这两个选项都用我不需要的标题序列化 csvFile。
解决方案
由于我没有找到使用库的方法,因此我选择手动执行此操作。像这样的东西对我有用:
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);
其中 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;
}
推荐阅读
- css - 我必须在 CSS 中选择一个 div 类
- python - docker-registry - 来自 python 的 PUT 请求以 400 响应,但 Curl 工作正常
- javascript - 如何按固定因子缩放 Gatsby 图像?
- javascript - 传递具有动态名称的道具以响应子组件
- elasticsearch - 使用通配符搜索多个字段的 Elastic Search 完全匹配查询
- spring-boot - SpringBoot SOAP 服务:SAAJ SOAP 消息没有正文
- html - 如果数字不断变化,如何在动态表上获取行数
- cassandra - .properties 文件中的 Log4j2 NoSQL Cassandra 配置
- r - R dplyr 左连接多个表,没有两个带后缀的单独列
- python - 用于 IOS 的带有 Objective-C 的 Python