使用ServiceStack.Text从C#控制台应用程序输出CSV文件。它为模型上的所有公共属性生成输出。生成的输出不会输出用引号引起来的属性,这是客户的要求。

CsvConfig.Reset();
CsvConfig.ItemDelimiterString = JsWriter.QuoteString;
workingFile.Write(modelToWrite.ToCsv());


查看文档,我看不到任何明确的引用,这些引用说“执行此操作以将输出属性包装在引号中”。我找到了这个:


  CSV转义带有以下任何字符的任何字符串:[] {},“
  使用CSV样式的转义符转义,其中将值包装在其中
  双引号,例如:
  
  新的MyClass {Name =“ Me,Junior”}序列化为:
  
  {名称:“我,少年”}


我设置了一个默认值为"[MSI]"的属性,它确实生成了用双引号引起的CSV包装[MSI]。

我的要求是将每个输出属性值都用引号引起来,但我没有看到强制其执行的设置。

您能帮我把输出属性括在双引号中吗?

最佳答案

csv的通用标准是rfc4180,它确实指定了仅当内容包含引号或拆分字符时才需要引号。

如果客户端要求与ServiceStack.Text的要求不同,则最简单的解决方案是自己编写CSV编写器。您只需要根据给定的规则对值进行转义即可。

当然,这并不难。在您的情况下,从您提供的信息来看,可能只是这样:

public static String GetAsCsvField(String input)
{
    if (String.IsNullOrEmpty(input))
        return "\"\""
    return "\"" + input.Replace("\"", "\"\"") + "\""
}

09-30 17:17
查看更多