IndexOutOfRangeException в CsvWriter - PullRequest
       31

IndexOutOfRangeException в CsvWriter

0 голосов
/ 24 января 2019

Я получаю 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;
}

Мне нужно что-то сделать для очистки моих данных или это ошибка?

1 Ответ

0 голосов
/ 24 января 2019

IndexOutOfRangeException теперь должно быть разрешено с этого коммита .

Это изменение доступно с v5.4.1, которое теперь доступно на MyGet .

...