C# 解析JSON时应用程序崩溃

C# 解析JSON时应用程序崩溃,c#,json,C#,Json,我正在使用Newtonsoft.JSON从一个网站获取一些JSON数据 早些时候,当我只解析1个值时,一切正常。最近,我需要更多,所以我现在解析3个值。不幸的是,现在它比正常情况下需要更多的时间(为什么会发生这种情况?JSON字符串还没有下载吗?),而且,它在很长一段时间后崩溃。堆栈显示它在设置1\u加载时崩溃 代码在这里- public void Settings1_Load(object sender, System.EventArgs e) { using (var webClie

我正在使用Newtonsoft.JSON从一个网站获取一些JSON数据

早些时候,当我只解析1个值时,一切正常。最近,我需要更多,所以我现在解析3个值。不幸的是,现在它比正常情况下需要更多的时间(为什么会发生这种情况?JSON字符串还没有下载吗?),而且,它在很长一段时间后崩溃。堆栈显示它在设置1\u加载时崩溃

代码在这里-

public void Settings1_Load(object sender, System.EventArgs e)
{
    using (var webClient = new System.Net.WebClient())
    {
        var json = webClient.DownloadString("http://backpack.tf/api/IGetPrices/v3/?format=json&key=53195ef54dd7b8a9088b4567");
        Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(json);
        value = (double)o["response"]["prices"][DefindexS]["6"]["0"]["current"]["value"];
        price = (double)o["response"]["prices"][DefindexS]["6"]["0"]["current"]["value"];
        currency = (string)o["response"]["prices"][DefindexS]["6"]["0"]["current"]["currency"];
        keyvalue = (double)o["response"]["prices"]["5021"]["6"]["0"]["current"]["value"];

    }
    LoadText();        
}

public void LoadText()
{

    txtUsername.Text = UsernameS;
    txtPassword.Text = PasswordS;
    txtName.Text = DisplayNameS;
    txtPrefix.Text = PrefixS;
    txtBackpack.Text = BackpackS;
    txtSell.Text = AnyUserHandler.SellPricePerItem.ToString();
    txtBuy.Text = AnyUserHandler.BuyPricePerItem.ToString();
    txtDefindex.Text = DefindexS;
    textBox1.Text = NameS;
    if (currency == "metal")
    {
        lblPrice.Text = "Price: " + value.ToString() + " ref";
    }
    else if (currency == "keys")
    {
        lblPrice.Text = "Price: " + value.ToString() + " keys";
    }

}

我得到了这个错误-

您可能应该查看JSON结果,看看您要查找的实际值是否与代码的顺序相同

但是为了使事情更简单,请尝试创建一个具体的类,并使用JSON.Net对其进行反序列化,然后按照断点验证反序列化的对象是否正确。您甚至可以尝试使用自动创建类

关于使用变量
DefindexS
的问题:

使用:

而不是

[DefindexS]
我认为这里需要使用JObject.GetValue方法(字符串)

而不是:

value = (double)o["response"]["prices"][DefindexS]["6"]["0"]["current"]["value"];
使用:


您可能应该查看JSON结果,以查看所查找的实际值是否与代码的顺序相同

但是为了使事情更简单,请尝试创建一个具体的类,并使用JSON.Net对其进行反序列化,然后按照断点验证反序列化的对象是否正确。您甚至可以尝试使用自动创建类

关于使用变量
DefindexS
的问题:

使用:

而不是

[DefindexS]
我认为这里需要使用JObject.GetValue方法(字符串)

而不是:

value = (double)o["response"]["prices"][DefindexS]["6"]["0"]["current"]["value"];
使用:


您可能应该查看JSON结果,以查看所查找的实际值是否与代码的顺序相同

但是为了使事情更简单,请尝试创建一个具体的类,并使用JSON.Net对其进行反序列化,然后按照断点验证反序列化的对象是否正确。您甚至可以尝试使用自动创建类

关于使用变量
DefindexS
的问题:

使用:

而不是

[DefindexS]
我认为这里需要使用JObject.GetValue方法(字符串)

而不是:

value = (double)o["response"]["prices"][DefindexS]["6"]["0"]["current"]["value"];
使用:


您可能应该查看JSON结果,以查看所查找的实际值是否与代码的顺序相同

但是为了使事情更简单,请尝试创建一个具体的类,并使用JSON.Net对其进行反序列化,然后按照断点验证反序列化的对象是否正确。您甚至可以尝试使用自动创建类

关于使用变量
DefindexS
的问题:

使用:

而不是

[DefindexS]
我认为这里需要使用JObject.GetValue方法(字符串)

而不是:

value = (double)o["response"]["prices"][DefindexS]["6"]["0"]["current"]["value"];
使用:

我明白了

我没有使用引号格式化realdef,而是使用DefindexS.ToString()进行格式化

value = (double)o["response"]["prices"][DefindexS.ToString()]["6"]["0"]["current"]["value"];
这奏效了^

我明白了

我没有使用引号格式化realdef,而是使用DefindexS.ToString()进行格式化

value = (double)o["response"]["prices"][DefindexS.ToString()]["6"]["0"]["current"]["value"];
这奏效了^

我明白了

我没有使用引号格式化realdef,而是使用DefindexS.ToString()进行格式化

value = (double)o["response"]["prices"][DefindexS.ToString()]["6"]["0"]["current"]["value"];
这奏效了^

我明白了

我没有使用引号格式化realdef,而是使用DefindexS.ToString()进行格式化

value = (double)o["response"]["prices"][DefindexS.ToString()]["6"]["0"]["current"]["value"];


这起作用了^

您遇到了什么错误?它在哪个行号上崩溃?@JohnKoerner我没有得到一个空引用..你得到了什么错误?它在哪个行号上崩溃?@JohnKoerner我没有得到一个空引用..你得到了什么错误?它在哪个行号上崩溃?@JohnKoerner我没有得到一个空引用..你得到了什么错误?它在哪个行号上崩溃?@JohnKoerner我没有得到一个空引用..嘿,谢谢你的回答,尽管在调试时我已经解决了这个问题。。当我使用currency=(string)o[“response”][“prices”][DefindexS][“6”][“0”][“current”][“currency”];它给出了一个错误,但是如果我用双qotes中的某个数字替换defindex。它是有效的。我如何做一些事情,比如在解析时,它识别defindex作为我想要的数字。所以,我的keyvalue是有效的,因为它使用“5021”,而其他的没有;t使用[String.Format(“{0}\”,DefindexS.ToString())]而不是[DefindexS],我仍然会收到相同的错误。谢谢您的回答,尽管在调试时,我现在已经解决了问题。。当我使用currency=(string)o[“response”][“prices”][DefindexS][“6”][“0”][“current”][“currency”];它给出了一个错误,但是如果我用双qotes中的某个数字替换defindex。它是有效的。我如何做一些事情,比如在解析时,它识别defindex作为我想要的数字。所以,我的keyvalue是有效的,因为它使用“5021”,而其他的没有;t使用[String.Format(“{0}\”,DefindexS.ToString())]而不是[DefindexS],我仍然会收到相同的错误。谢谢您的回答,尽管在调试时,我现在已经解决了问题。。当我使用currency=(string)o[“response”][“prices”][DefindexS][“6”][“0”][“current”][“currency”];它给出了一个错误,但是如果我用双qotes中的某个数字替换defindex。它是有效的。我如何做一些事情,比如在解析时,它识别defindex作为我想要的数字。所以,我的keyvalue是有效的,因为它使用“5021”,而其他的没有;t使用[String.Format(“{0}\”,DefindexS.ToString())]而不是[DefindexS],我仍然会收到相同的错误。谢谢您的回答,尽管在调试时,我现在已经解决了问题。。当我使用currency=(string)o[“response”][“prices”][DefindexS][“6”][“0”][“current”][“currency”];它给出了一个错误,但是如果我用双qotes中的某个数字替换defindex。它是有效的。我如何做一些事情,比如在解析时,它识别defindex作为我想要的数字。所以,我的keyvalue是有效的,因为它使用“5021”,而其他的没有;t使用[String.Format(“{0}\”,DefindexS.ToString())]而不是[DefindexS],我仍然会得到相同的错误