Member 14779968 Ответов: 2

Как преобразовать массив json в словарь?


Я пытаюсь преобразовать свой массив json в пары ключ/значение в словаре, но я продолжаю получать свои ключи и значения как null. Исключение : Система.ArgumentNullException: 'значение не может быть null.
Имя параметра: ключ'

Я пытаюсь получить их в качестве
"ключевая ценность
"ключевая ценность

Вот этот Json

[
  {
    "id": 1,
    "name": "David",
    "type": 0
  },
  {
    "id": 12,
    "name": "John",
    "type": 0,
  }
]


Что я уже пробовал:

var value = JsonConvert.DeserializeObject<List<KeyValuePair<string, object>>>(jsonString).ToDictionary(x => x.Key, y => y.Value);

George Swan

Не могли бы вы привести пример ключа и значения, которые вы хотите получить из своей строки Json? Вы хотите 'идентификатор' в качестве ключа и 'Name' и 'тип' в качестве значения?

PIEBALDconsult

У вас есть посторонняя запятая? "тип": 0,

Member 14637786

Опубликуйте пример ожидаемого результата. Если вам нужен словарь, то просто десериализуйте его в него:
var res = JsonConvert.DeserializeObject в<список<словарь на<строка,объект&ГТ;&ГТ;&ГТ;(в JSON);

У вас есть словарь, но на самом деле их два, поскольку в ваших коллекциях есть два объекта, вы не можете просто объединить их, так как ключи будут дублироваться. Вам нужно указать ключ, например id, и тогда значение будет, например, анонимным объектом с именем и типом. Зависит от того, каков ваш реальный сценарий.

2 Ответов

Рейтинг:
0

George Swan

Предполагая, что вы хотите id как ключ и Person в качестве ценности вы можете сделать что-то вроде этого.


 public class Person
  {
      public int id { get; set; }
      public string name { get; set; }
      public int type { get; set; }
  }

string jsonString = @"[
 {
  'id': 1,
  'name': 'David',
  'type': 0
 },
 {
  'id': 12,
  'name': 'John',
  'type': 0
 }
]";

 var dictionary = JsonConvert.DeserializeObject<IEnumerable<Person>>(jsonString).
                  Select(p => (Id: p.id, Record: p)).
                  ToDictionary(t => t.Id, t => t.Record);


Рейтинг:
0

Andre Oosthuizen

Кажется, что для ключа не возвращается никакого значения, сделайте проверку, если значение пустое, что-то вроде этого может помочь -

static void Main(String[] args) 
    {
        string number = Console.ReadLine();
        int n;
        Int32.TryParse(number, out n);

        var value = new Dictionary();

        for(int i = 0; i < n; i++)
        {
            //Try to use better naming conventions...
            string myKey = Console.ReadLine();
            string myValue = Console.ReadLine();
            value.Add(myKey, myValue);
        }

        foreach (var pair in value)
        {
            string myKey = pair.Key;
            string myValue = pair.Value;
        }


        string x = Console.ReadLine();
        if(x == null || !value.ContainsKey(x))
        {
            Console.WriteLine("Not Found");
        }
        else
        {
            string result = value[x];
            Console.Write(x);
            Console.Write("=");
            Console.Write(result);
        }
    }