Как преобразовать массив json в словарь, который также содержит повторяющиеся ключи? - PullRequest
1 голос
/ 10 июля 2020

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

Exception : System.ArgumentNullException: 'Value cannot be null.
Parameter name: key'

Я пытаюсь получить их как

"Key" : Value
"Key" : Value

Вот 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);

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Учитывая

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

}

public class SomeFunkyRoot    {
    public List<MyArray> MyArray { get; set; } 

}

Для десериализации в словарь

var root = JsonConvert.DeserializeObject<SomeFunkyRoot>(jsonString);

// returns Dictionary<int,MyArray>
var dict root.MyArray
             .ToDictionary(x => x.id);

Если у вас есть повторяющиеся идентификаторы

var root = JsonConvert.DeserializeObject<SomeFunkyRoot>(jsonString);

// returns Dictionary<int,List<MyArray>>
var dict = root.MyArray
              .GroupBy(x => x.id)
              .ToDictionary(x => x.Key, x => x.ToList());

// or you could use a lookup
// returns ILookup<int,MyArray>
var lookup = root.MyArray
                 .ToLookup(x => x.id);
0 голосов
/ 10 июля 2020

@ Общий ответ отличный. В любом случае я хотел написать другую версию.

var anonymousType = new[] { new { id = 0, name = "", type = 0 } };
var data = JsonConvert.DeserializeAnonymousType(json, anonymousType);
var dict = data.GroupBy(x => x.id).ToDictionary(x => x.Key, x => x.ToList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...