0
    foreach (Entitlement entitlement in game.entitlements)
    {
         string[] array = entitlement.offerPath.Split(new char[] { '/' })[2].Split(new char[] { '-' });
         text = text + string.Join(" ", array) + "\r\n";
    }

Добрый день! Парсю json ответ сайта, и пытаюсь убрать ненужные символы с помощью Split, однако именно на сплите получаю ошибку: System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

Как я заметил, ошибку получаю если среди данных есть пустые строки, потому что эта ошибка возникает далеко не при всех данных. Буду благодарен за Ваше решение моей проблемы!

S3RL
  • 23
  • На приведённых данных не падает. – A K Apr 04 '19 at 17:52
  • Не понял Вас. Я привел весь код, который использую. Что не так? – S3RL Apr 04 '19 at 17:58
  • 1
  • @S3RL Ваш код падает на каких-то данных, но не на этих. Приведите код, на которых падает. Желательно обрезать код, чтобы вопрос не был простыней текста. См. как создать хороший mvce. У вас нет проблем с json.net у вас проблемы со стрингой (offerPath) которую вы режете сплитом при этом рассчитывая, что всегда будет [2] И кстати зачем убирать ненужные символы через string.Split(), когда можно воспользоваться .Replace()? – A K Apr 04 '19 at 18:00
  • @AK Даже если просто Split('/') сделать, без [2] - результат тот же. Если сделать .Replace() - результат тот же. Подредактировал вопрос, добавив в него данные, которые находятся в offerPath! – S3RL Apr 04 '19 at 18:17
  • @S3RL и вас никак пустое место не смущает? Как я заметил, ошибку получаю если среди данных есть пустые строки - я дал вам ссылку на дубликат, ознакомьтесь – tym32167 Apr 04 '19 at 19:24
  • @tym32167 Ознакомился, но в силу своей неопытности ничего не понял. Зачем мне выбрасывать exception или заменять на стандартное значение пропуски? Мне от пустых строк как-то нужно избавиться, а потом работать с остальными данными, чтобы при удалении ненужных мне символов не выбивало Exception. – S3RL Apr 05 '19 at 17:50
  • проблема в том, что после парсинга у вас поле offerPath в некоторых случаях равняется null, потому, когда вы вызываете какие то методы на такой строке, вот тут например, entitlement.offerPath.Split(...), вы получаете ошибку. – tym32167 Apr 05 '19 at 21:29
  • @tym32167 Это я понял, я не понял как это исправить. Исходя из приведенного Вами примера, можно обрабатывать с помощью exception, только что мне это даст? – S3RL Apr 07 '19 at 07:46
  • ну а какой результат вы хотите получить в том случае, когда у вас нет данных в поле entitlement.offerPath ? – tym32167 Apr 07 '19 at 11:35
  • @tym32167 Я хочу пропустить эти пустые данные, и работать с другими. – S3RL Apr 07 '19 at 12:10
  • Тогда вам надо foreach (Entitlement entitlement in game.entitlements.Where(x=>!string.IsNullOrEmpty(x.offerPath))) {....} – tym32167 Apr 07 '19 at 14:43
  • @tym32167 Именно это мне и нужно было. Большое спасибо за помощь! – S3RL Apr 07 '19 at 20:13

1 Answers1

0

Благодарю за помощь @tym32167 ! Для решения моей проблемы, нужно убрать пустые строки с данными (null), и работать с остальными. В таком случае, программа не будет выдавать исключение при обработке пустых данных.

Убираем пустые данные из string[] array с помощью x=>!string.IsNullOrEmpty(x.offerPath)

Получится: foreach (Entitlement entitlement in game.entitlements.Where(x=>!string.IsNullOrEmpty(x.offerPath))) {....}

S3RL
  • 23