CsvWriter 中的 IndexOutOfRangeException

IndexOutOfRangeException in CsvWriter

我在尝试序列化动态对象数据集时收到 System.IndexOutOfRangeException。它不是任何一行,因为我已经对每一行进行了测试(在我的示例中只有四行)。它发生在 CsvWriter.HasAnyEscapeChars 函数中。确切的堆栈跟踪是:

   at ServiceStack.Text.CsvWriter.HasAnyEscapeChars(String value)
   at ServiceStack.TextExtensions.ToCsvField(Object text)
   at ServiceStack.Text.CsvDictionaryWriter.WriteObjectRow(TextWriter writer, IEnumerable`1 row)
   at ServiceStack.Text.CsvDictionaryWriter.Write(TextWriter writer, IEnumerable`1 records)
   at ServiceStack.Text.CsvWriter`1.Write(TextWriter writer, IEnumerable`1 records)
   at ServiceStack.Text.CsvSerializer`1.WriteObject(TextWriter writer, Object value)
   at ServiceStack.Text.CsvSerializer.SerializeToStream[T](T value, Stream stream)
   at <my code>

看起来(从源代码来看)HasAnyEscapeChars 需要添加一个防止空字符串的保护措施,因为对 value[0] 的引用将在那里失败,尽管我没有看到这实际上会怎样在实际使用中发生。

public static bool HasAnyEscapeChars(string value)
{
  return CsvConfig.EscapeStrings.Any(value.Contains)
     || value[0] == JsWriter.ListStartChar
     || value[0] == JsWriter.MapStartChar;
}

我需要做些什么来清理我的数据还是一个错误?

IndexOutOfRangeException 现在应该从 this commit 解析。

此更改适用于现在 available on MyGet 的 v5.4.1。