JSON массив в словарь - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь десериализовать JSON в C# объект с помощью Newtonsoft Json.

Мой json выглядит так:

{"something" : [ "key1" : "value1", "key2" : "value2"]}

Но это не полный json. Так что это должно быть частью большого объекта. Я не могу использовать это решение JSON массив в C# Словарь , потому что я использую

JsonConvert.DeserializeObject<MyObject>(json);

Можно ли инициализировать объект, как это?

public class Something
{   
    [JsonProperty]
    public Dictionary<string, string> MyDictionary;
}

Но когда я пытаюсь это сделать, я получаю исключение:

Newtonsoft. Json .JsonSerializationException: 'Невозможно десериализовать текущий массив JSON (например, [1,2,3] ) в тип 'System.Collections.Generi c .Dictionary`2 [System.String, ConsoleApp4.TxPerfMeasurements]', поскольку тип требует объекта JSON (например, {"name": "value"}) для правильной десериализации , Чтобы исправить эту ошибку, измените JSON на JSON объект (например, {"name": "value"}) или измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList) как List, который можно десериализовать из массива JSON. JsonArrayAttribute также можно добавить к типу, чтобы принудительно десериализовать его из массива JSON.

1 Ответ

0 голосов
/ 01 апреля 2020

Вход

{
  "something": [
    { "key1": "value1" },
    { "key2": "value2" }
  ]
}

Ваша модель должна выглядеть следующим образом

public class Something
{   
    public List<Dictionary<string, string>> something { get; set; }
}

Используйте Linq для преобразования в словарь

var result = JsonConvert.DeserializeObject<Something>(json);
var dict = result.something.SelectMany(d => d).ToDictionary(e => e.Key, e => e.Value);

Вывод

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...