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