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("\"", "\"\"") + "\""
}