CsvWriter中的IndexOutOfRangeException

时间:2019-01-23 22:48:08

标签: c# servicestack servicestack-text

我在尝试序列化动态对象的数据集时遇到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;
}

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

1 个答案:

答案 0 :(得分:4)

IndexOutOfRangeException现在应该从this commit解析。

此更改可从v5.4.1(现在为available on MyGet)中获得。