2015-05-21 3 views
5

У меня есть набор словарей, которые я создал в javascript. После сериализации JSON я получаю следующую строку:Deserialize json массив словарей в C#

"[{\"key\":\"60236\",\"value\":\"1\"},{\"key\":\"60235\",\"value\":\"gdsfgdfsg\"},{\"key\":\"60237\",\"value\":\"1\"}]" 

я с трудом получает эти десериализованную в список или словарь в C#.

Я пробовал:

Dictionary<int, string> values = JsonConvert.DeserializeObject<Dictionary<int, string>>(Model.Json); 

, но это не работает.

+0

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

ответ

11

Есть несколько способов, которые вы можете извлечь ваши пары ключ/значение для построения словаря:

var dict = "[{\"key\":\"60236\",\"value\":\"1\"}, 
      {\"key\":\"60235\",\"value\":\"gdsfgdfsg\"}, 
      {\"key\":\"60237\",\"value\":\"1\"}]"; 

Использование List<KeyValuePair<int, string>>

var dictionary = JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(dict) 
           .ToDictionary(x => x.Key, y => y.Value); 

использовать пользовательский объект, который представляет ваши пары, а затем создать словарь из вашей коллекции.

var output = JsonConvert.DeserializeObject<List<Temp>>(dict); 
var dictionary = output.ToDictionary(x => x.Key, y => y.Value); 

public class Temp 
{ 
    public int Key { get; set; } 
    public string Value { get; set; } 
} 

Наконец, если вам неудобно с помощью пользовательского «холостого» объекта только для десериализации, вы можете взять крошечный удар по производительности и использовать динамическую вместо этого.

var dictionary = JsonConvert.DeserializeObject<List<dynamic>>(dict) 
           .ToDictionary (x => (int)x.key, y => (string)y.value); 
2

что я предлагаю для того, чтобы попытаться увидеть, что на самом деле представляет ваш json. Вы можете создать класс здесь на Json2CSharp и использовать этот класс/Список этого класса (зависит от того, находится ли ваш json в виде массива или простого объекта класса).

Только тип пропуска до JsonConvert.DeserializeObject класс тип часть. например

var output = JsonConvert.DeserializeObject<List<Class>>(json); 

В вашем случае это просто массив Temp класса

public class Temp 
{ 
    public string key { get; set; } 
    public string value { get; set; } 
} 

Sp все, что вам нужно это: -

var output = JsonConvert.DeserializeObject<List<Temp>>(json); 

вы можете преобразовать этот список в словарь как предлагается в другом ответе: -

var dictionary = output.ToDictionary(x => x.Key, y => y.Value); 

Это всегда помогает мне. Надеюсь, это тоже поможет.