ServiceStack.Text model.ToCsv() 未将输出属性用引号引起来
ServiceStack.Text model.ToCsv() not wrapping output properties in quotes
使用 ServiceStack.Text 从 C# 控制台应用程序输出 CSV 文件。它为模型上的所有 public 属性生成输出。生成的输出不输出用引号括起来的属性,这是客户要求。
CsvConfig.Reset();
CsvConfig.ItemDelimiterString = JsWriter.QuoteString;
workingFile.Write(modelToWrite.ToCsv());
查看文档,我没有看到任何明确的引用 "do this to wrap output properties in quotes"。我发现了这个:
CSV escaping Any string with any of the following characters: []{},"
is escaped using CSV-style escaping where the value is wrapped in
double quotes, e.g:
new MyClass { Name = "Me, Junior" } is serialized as:
{Name:"Me, Junior"}
我设置了一个 属性,默认值为 "[MSI]"
,它确实生成了用双引号括起来的 CSV [MSI]。
我的要求是将每个输出 属性 值用引号括起来,但我没有看到强制它这样做的设置。
你能帮我得到用双引号括起来的输出属性吗?
根据@Nyerguds 的评论,只有当字段包含转义字符时才需要引用 CSV 字段,这是 ServiceStack.Text 的行为,并且没有配置在不需要时强制引用。
所有 CSV 阅读器都应该能够解析不带引号的字段,因为它是 CSV 字段最常用的格式。
csv的通用标准是rfc4180,它确实规定只有在内容包含引号或分隔字符时才需要引号。
如果客户要求与 ServiceStack.Text
不同,最简单的解决方案就是自己编写 CSV 编写器。您只需要根据给定的规则对值进行转义即可。
当然,这并不难。在你的情况下,根据你提供的信息,它可能只是这样的:
public static String GetAsCsvField(String input)
{
if (String.IsNullOrEmpty(input))
return "\"\""
return "\"" + input.Replace("\"", "\"\"") + "\""
}
使用 ServiceStack.Text 从 C# 控制台应用程序输出 CSV 文件。它为模型上的所有 public 属性生成输出。生成的输出不输出用引号括起来的属性,这是客户要求。
CsvConfig.Reset();
CsvConfig.ItemDelimiterString = JsWriter.QuoteString;
workingFile.Write(modelToWrite.ToCsv());
查看文档,我没有看到任何明确的引用 "do this to wrap output properties in quotes"。我发现了这个:
CSV escaping Any string with any of the following characters: []{}," is escaped using CSV-style escaping where the value is wrapped in double quotes, e.g:
new MyClass { Name = "Me, Junior" } is serialized as:
{Name:"Me, Junior"}
我设置了一个 属性,默认值为 "[MSI]"
,它确实生成了用双引号括起来的 CSV [MSI]。
我的要求是将每个输出 属性 值用引号括起来,但我没有看到强制它这样做的设置。
你能帮我得到用双引号括起来的输出属性吗?
根据@Nyerguds 的评论,只有当字段包含转义字符时才需要引用 CSV 字段,这是 ServiceStack.Text 的行为,并且没有配置在不需要时强制引用。
所有 CSV 阅读器都应该能够解析不带引号的字段,因为它是 CSV 字段最常用的格式。
csv的通用标准是rfc4180,它确实规定只有在内容包含引号或分隔字符时才需要引号。
如果客户要求与 ServiceStack.Text
不同,最简单的解决方案就是自己编写 CSV 编写器。您只需要根据给定的规则对值进行转义即可。
当然,这并不难。在你的情况下,根据你提供的信息,它可能只是这样的:
public static String GetAsCsvField(String input)
{
if (String.IsNullOrEmpty(input))
return "\"\""
return "\"" + input.Replace("\"", "\"\"") + "\""
}