在尝试序列化动态对象的数据集时,我得到了一个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需要添加一个防止空字符串的保护,因为在那里对值的引用将失败,尽管我不知道这在实际使用中是如何发生的。
public static bool HasAnyEscapeChars(string value)
{
return CsvConfig.EscapeStrings.Any(value.Contains)
|| value[0] == JsWriter.ListStartChar
|| value[0] == JsWriter.MapStartChar;
}我是否需要做些什么来清理我的数据,或者这是一个bug?
发布于 2019-01-24 07:02:35
现在应该从this commit解析IndexOutOfRangeException。
此更改从v5.4.1开始提供,该版本现在是available on MyGet。
https://stackoverflow.com/questions/54336865
复制相似问题