我在尝试序列化动态对象的数据集时遇到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;
}
我需要做一些事情来清理我的数据还是一个错误?
答案 0 :(得分:4)
IndexOutOfRangeException
现在应该从this commit解析。
此更改可从v5.4.1(现在为available on MyGet)中获得。