System.NullReferenceException: “Ссылка на объект не указывает на экземпляр объекта.”

265
28 октября 2018, 16:10

Пытаюсь победить ошибку уже 4 день., уже весь интернет облазил, пересмотрел много решений, но так и не приблизился к решению проблемы :(

Сам код

using System;
using System.Net;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Cryptography;
namespace binance_0._1
{
    class Program
    {
        static void Main(string[] args)
        {
            //заходим на биржу
            String url = "сайт";
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            Console.WriteLine(((HttpWebResponse)httpWebResponse).StatusDescription);
            //перевод в джонсон
            string response;
            using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
            {
                response = streamReader.ReadToEnd();
            }
            //выцепляем из динамического джонсна пары и их назхвания
            int pr_btc = 0;
            int pr_usd = 0;
            dynamic stuff = JsonConvert.DeserializeObject(response);
            JObject jObject = (JObject)stuff["symbol"];
            List<string> pair_btc = new List<string>(); // массив коинов с BTC
            List<string> pair_usd = new List<string>(); // с пары usdt
            //выцепляем из динамического джонсoна пары и их назхвания
            foreach (var data in jObject)
            {
                //формируем массив пар с btc
                if ((data.Key.Contains("BTC")))
                {
                    pair_btc.Add(data.Key);
                    pr_btc++;
                }
                //формируем массив пар с usdt
                if ((data.Key.Contains("USDT")))
                {
                    pair_usd.Add(data.Key);
                    pr_usd++;
                }
                Console.WriteLine(jObject);
                Console.ReadLine();
            }
        }
    }
}

Ошибка происходит в строке

foreach (var data in jObject)

Ругается на переменную jObject

Подскажите пожалуйста в решение проблемы.

Answer 1
JObject jObject = (JObject)stuff["symbol"];

Вы здесь делаете явное приведение к типу JObject, если приведение не удалось, будет вызвано исключение.

Лучше воспользоваться оператором приведения as:

var jObject = stuff["symbol"] as JObject;

И проверять этот объект на null:

if (jObject){
    return; //Выход из метода или обработка ошибки
}

Примечание:

Оператор as аналогичен операции приведения. Однако, если преобразование невозможно, as возвращает null, а не вызывает исключение.

Answer 2

Вот подробности ошибки

System.NullReferenceException HResult=0x80004003 Сообщение = Ссылка на объект не указывает на экземпляр объекта. Источник = binance Трассировка стека: в binance_0._1.Program.Main(String[] args) в C:\Users\Kapusta\documents\visual studio 2017\Projects\binance\binance\Program.cs:строка 41

READ ALSO
Мульти тач как в Piano Tile

Мульти тач как в Piano Tile

Каким методом реализовать данную функцию? Если touchcounts, то отслеживает только количество нажатий

165
Запись в файл без перезагрузки формы

Запись в файл без перезагрузки формы

Есть форма "form" с несколькими строками, не могу сделать, так, чтобы при нажатии на кнопку submit форма не перезагружалась, а просто записала данные...

187