从英雄联盟JSON API中提取召唤师信息

时间:2015-10-04 17:17:26

标签: c# json

我不知道如何从webBrowser中获取我的JSON文件中的信息:

{
    "somename":{
        "id":51252152,
        "name":"somename",
        "profileIconId":531,
        "summonerLevel":30,
        "revisionDate":25235211
    }
}

这就是我到目前为止所做的:(虽然我遇到的地方是label_id.Text,我想要JSON文件中的id。

            Res_Web = webBrowser1.Document.Body.InnerText;

            var jss = new JavaScriptSerializer();
            var d = jss.Deserialize<dynamic>(Res_Web);

            var list = new JavaScriptSerializer().Deserialize<List<dynamic>>(Res_Web);
            label_id.Text = Convert.ToString(d[Name_b]["id"]);

Stacktrace正在给我:StackTrace

这三个答案在每个方面都是正确的。谢谢!

3 个答案:

答案 0 :(得分:1)

要反序列化Json,我使用了Newtonsoft Json,请参阅http://www.newtonsoft.com/json

当你需要反序列化时 - 创建一个与你json的结构相匹配的对象。

然后反序列化是一个简单的问题,因此

obj = JsonConvert.DeserializeObject<MyClass>(jsonstring);

如果你想获得Json的节点

jsonnode = (JContainer)rd["jsonnode"]["jsonnodechild"]

以下内容可用于遍历节点的子节点

foreach (JContainer s in scopes)
{


}

此外,我不知道您的要求的完整规范,但不需要使用WebBrowser控件进行Web调用 - 您可以使用WebRequest类

WebRequest req = null;
WebResponse res = null;
StreamReader req = WebRequest.Create(url);
res = req.GetResponse();    
sr = new StreamReader(res.GetResponseStream());
jsonString = sr.ReadToEnd();

答案 1 :(得分:1)

我已经在自己的WinForm应用程序中测试了您的代码,但它确实有效。我使用了System.Web.Extensions 4.0

var Res_Web = "{\"somename\":{\"id\":51252152,\"name\":\"somename\",\"profileIconId\":531,\"summonerLevel\":30,\"revisionDate\":25235211}}";

var jss = new JavaScriptSerializer();
var d = jss.Deserialize<dynamic>(Res_Web);

var list = new JavaScriptSerializer().Deserialize<List<dynamic>>(Res_Web);
var labelText = Convert.ToString(d["somename"]["id"]);

尝试她的其他解决方案:Deserialize JSON into C# dynamic object?

答案 2 :(得分:1)

这是我的建议。首先,创建一个简单的类来保存来自JSON内部的召唤者数据:

public class Summoner
{
    public int id { get; set; }
    public string name { get; set; }
    public int profileIconId { get; set; }
    public long revisionDate { get; set; }
    public int summonerLevel { get; set; }
}

由于JSON外部部分的密钥(例如&#34; somename&#34;)可能因查询而异,因此反序列化为Dictionary<string, Summoner>

// this would be the JSON string you retrieve from your web request
string json = @"
{
    ""somename"":{
        ""id"":51252152,
        ""name"":""somename"",
        ""profileIconId"":531,
        ""summonerLevel"":30,
        ""revisionDate"":25235211
    }
}";

var jss = new JavaScriptSerializer();
var result = jss.Deserialize<Dictionary<string, Summoner>>(json);

现在,您可以通过从字典中获取第一个键的Value来提取数据。该值将是Summoner类的一个实例,您可以轻松使用它:

var summoner = result.First().Value;

Console.WriteLine("id = " + summoner.id);
Console.WriteLine("name = " + summoner.name);
Console.WriteLine("level = " + summoner.summonerLevel);

以上输出:

id = 51252152
name = somename
level = 30