2015-10-04 39 views
0

我對如何從我的JSON文件中的web瀏覽器中的信息不知道召喚師信息:提取從傳奇JSON API聯賽

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

這是我到目前爲止有:(雖然地方,我「M卡是我想要從JSON文件中的ID是label_id.Text

  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

的三個答案是CORRE在他們的方式。謝謝!

+0

什麼是Name_b? – PMerlet

+0

什麼是webBrowser1? – Magu

+0

Name_b是一個公共靜態字符串Name_b; webBrowser1是Forms Web瀏覽器 – Colour

回答

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; } 
} 

由於鍵(例如,「somename」)在JSON的外部可能取決於您的查詢,反序列化爲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 
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控件,使網絡電話 - 您可以使用WebRequest類

WebRequest req = null; 
WebResponse res = null; 
StreamReader req = WebRequest.Create(url); 
res = req.GetResponse();  
sr = new StreamReader(res.GetResponseStream()); 
jsonString = sr.ReadToEnd(); 
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?

+0

儘管我收到了StackTrace中的錯誤,但我做了同樣的事情。 – Colour

+0

它的工作原理!非常感謝大家的幫助! – Colour