2014-10-04 45 views
1

我使用JSON需要幫助訪問一個JSON對象,如果沒有它的名字C#

{"bloxwich": { "id": 44068310, "name": "Bloxwich", "profileIconId": 663, "revisionDate": 1412456785000, "summonerLevel": 30 }}

但是bloxwich會根據用戶輸入改變。

這是代碼,我可以用它來接取該ID只爲bloxwich

 string result = getResponse("https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/" + summonerName + "?api_key=" + key); 
     dynamic resultData = JsonConvert.DeserializeObject(result); 
     Console.WriteLine(resultData.bloxwich.id); 

,但我想弄清楚如何我可以接取的bloxwich部分每次,即使名稱會有所不同。

我試圖用一個for循環這樣

foreach (var item in resultData) 
    { 
      Console.WriteLine("Item: " + item[0].id); 
    } 

,但我得到了以下錯誤:

System.InvalidOperationException was unhandled 
    HResult=-2146233079 
    Message=Cannot access child value on Newtonsoft.Json.Linq.JProperty. 
    Source=Newtonsoft.Json 
    StackTrace: 
     at Newtonsoft.Json.Linq.JToken.get_Item(Object key) 
     at CallSite.Target(Closure , CallSite , Object , Int32) 
     at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1) 
     at ConsoleApplication1.Api.getSummonerID(String summonerName) in C:\Users\Admin\documents\visual studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Api.cs:line 147 
     at ConsoleApplication1.Program.Main(String[] args) in C:\Users\Admin\documents\visual studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 22 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

回答

0

試着這麼做

using System; 
using Newtonsoft.Json.Linq; 

JObject resultData = JObject.Parse(result); 
foreach (var item in resultData) 
{ 
    Console.WriteLine(item.Key); // this will print "bloxwich" for your example 
    Console.WriteLine("Item: " + item.Value.SelectToken("id")); 
} 
0

您是否嘗試過這樣的事情?

Dictionary<string, dynamic> data = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(result); 
var key = data.Keys.First(); 
var item = data[key]; 
Console.WriteLine("Id " + item.id); // here you have the id 

我不知道在這種情況下使用字典是否完全正確,但也許它可以幫助你。