2015-05-21 30 views
5

Mam wiele słowników, które utworzyłem w javascript. Po szeregowania do json pojawia się następujący ciąg:Deserializuj tablicę słowników json w języku C#

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

Mam twardy czas coraz to rozszeregować do każdej listy lub słownika w języku C#.

Próbowałem:

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

ale to nie działa.

+0

zmienić na i sprawdzić, czy to rozwiązuje problem. klucz jest zdefiniowany między dwoma cytatami, które mogą być problemem – faljbour

Odpowiedz

11

Istnieje kilka sposobów, które można wyodrębnić pary klucz/wartość skonstruować słownika:

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

Korzystając List<KeyValuePair<int, string>>

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

użyć niestandardowego obiektu, który reprezentuje swoich par, a następnie utworzyć słownik z Twojej kolekcji.

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; } 
} 

Wreszcie, jeśli jesteś niewygodne z użyciem niestandardowych „wyrzucenie” obiekt tylko dla deserializacji, można wziąć mały spadek wydajności i używać zamiast dynamiczny.

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

sugeruję, aby spróbować zobaczyć, co faktycznie reprezentuje twój json. Możesz utworzyć klasę tutaj na Json2CSharp i użyć tej klasy/listy tej klasy (zależy od tego, czy twój json ma postać tablicy lub prostego obiektu klasy).

Po prostu przepisz typ na JsonConvert.DeserializeObject część typu klasy. na przykład

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

W twoim przypadku jest to po prostu tablica klasy Temp

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

Sp Wszystko czego potrzebujesz to: -

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

można przekonwertować tę listę do słownika jak zasugerowano w innej odpowiedzi: -

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

To zawsze pomoże mi. Mam nadzieję, że ci to pomoże.

Powiązane problemy