从网站获取JSON,然后在C#中解析它

时间:2014-02-10 17:16:12

标签: c# json json.net

因此我需要一个网站来获取此JSON数据。 链接是直接的(我正在使用网站的API)

问题是,文件太大了!成千上万的行......更多..

我有visual studio 2013,我需要做的是在回调中下载JSON数据,然后解析它以获得特定值。我正在使用Newtonsoft.JSON来解析它,这是我认为可以解析它

var obj = JsonConvert.DeserializeObject<JContainer>(jsonText);
var value = (int)obj["response"]["prices"]["5021"]["6"]["0"]["current"]["value"];

问题是,如何下载所有数据并将其转换为C#类?还有另外一种方法吗? 非常感谢。

编辑:如果不是JSON,我可以选择以JSONP和VDF格式下载

以下是JSON数据的链接 - http://backpack.tf/api/IGetPrices/v3/?format=json&key=52f75dab4dd7b82f698b4568

3 个答案:

答案 0 :(得分:2)

我这样做了

using (var webClient = new System.Net.WebClient())
        {
            var json = webClient.DownloadString("http://backpack.tf/api/IGetPrices/v3/?format=json&key=00a00aaa0aa0a00a000a0000");
            Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(json);
            var value = (int)o["response"]["prices"]["5021"]["6"]["0"]["current"]["value"];
            Console.WriteLine(value);
        }

感谢大家的帮助!!

答案 1 :(得分:0)

试试restsharp。它可以让你做类似

的事情
var prices = client.Execute<Prices>(request);

其中价格是与返回的架构匹配的类

答案 2 :(得分:0)

看看Brandon发表的评论,他原则上是正确的,但如果你不想要的话,你不必转到Newtonsoft。您只需要使用不同的JSON.NET API

var serializer = new JsonSerializer();
using (var stream = File.OpenRead("C:\\Users\\gweakliem\\Downloads\\sotest.js"))
{
    using (StreamReader streamReader = new StreamReader(stream))
    {
        using (JsonReader reader = new JsonTextReader(streamReader))
        {
            var aThing = serializer.Deserialize<JContainer>(reader);
            var aValue = (int) aThing["response"]["prices"]["5021"]["6"]["0"]["current"]["value"];
            Console.WriteLine("Read a value " + aValue);
        }
    }
}

如果您担心在阅读时阻塞此线程,看起来您将不得不编写一些代码。我没有在JsonTextReader或JsonSerializer上看到等待的方法,所以我希望这些方法会阻塞。

现在,如果你想把它变成对象,这里有几个其他的SO帖子:

this post涵盖了一系列反序列化选项。