Я получаю 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
необходимо добавить защиту от пустой строки, так как ссылка на значение [0] там потерпит неудачу, хотя я не вижу, как это на самом деле произошло бы при фактическом использовании .
public static bool HasAnyEscapeChars(string value)
{
return CsvConfig.EscapeStrings.Any(value.Contains)
|| value[0] == JsWriter.ListStartChar
|| value[0] == JsWriter.MapStartChar;
}
Мне нужно что-то сделать для очистки моих данных или это ошибка?