У меня есть следующий код, который пытается получить значения в словаре, и, похоже, он не работает.

using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;

namespace DemoTests
{
    class Program
    {
        static void Main(string[] args)
        {
            string jsonString = "{\"Name\":\"Bob Smith\",\"mainTitle\":\"Title1\",\"emailList\":[\"test.e@example.com\"],\"rowCount\":\"4\",\"emailSubject\":\"Test Email\",\"items\":{\"sheets\":[[{\"ID\": \"4564342\", \"start\": \"08:00\"}]]}}";
            JObject jsonObj = JObject.Parse(jsonString);
            Dictionary<dynamic, dynamic> results = jsonObj.ToObject<Dictionary<dynamic, dynamic>>();
  
            List<dynamic> subList = results["items"]["sheets"].ToObject<List<dynamic>>();
            foreach (dynamic tableEntries in subList) 
            {
                var entryDict = tableEntries[0].ToObject<Dictionary<dynamic, dynamic>>();
                for (int k = 0; k < entryDict.Keys.Count; k++)
                {
                    String key = entryDict.Keys.ToList()[k];
                    Console.WriteLine(key);
                }
            }
      
            }

    }
}

Я получаю сообщение об ошибке на линии String key = entryDict.Keys.ToList()[k];

Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in System.Linq.Expressions.dll An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Linq.Expressions.dll 'System.Collections.Generic.Dictionary<object,object>.KeyCollection' does not contain a definition for 'ToList'

Как я могу его запустить? Я новичок в C #, поэтому открываю новые способы написания кода.

0
West 11 Окт 2021 в 10:53

2 ответа

Лучший ответ

Сообщение об ошибке сообщает вам, что entryDict.Keys не имеет функции ToList () .Keys - это коллекция ключей, которая использует перечислитель для обхода. Вы не можете получить доступ к нему как к массиву / списку.

Что вы хотите:

foreach (var key in results.Keys)
{
    Console.WriteLine(key.ToString());
}
1
Taco Verhagen 11 Окт 2021 в 08:01

Создать список с помощью конструктора

List<string> keyList = new List<string>(entryDict.Keys);
for (int k = 0; k < entryDict.Keys.Count; k++){
    String key = keysList[k];
    Console.WriteLine(key);
}
-2
Omri Tamam 11 Окт 2021 в 08:13