Нужна помощь в доступе к объекту Json без его имени C #

1

Я использую json

{"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: 
Теги:
serialization

2 ответа

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

Я не знаю, правильно ли использовать словарь в этом случае, но, возможно, это поможет вам.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню