2013-07-18 3 views
-3

У меня есть следующий JSON в моем приложении.Как преобразовать словарь pair.value в словарь в C#?

string json = @"{""dest"":[ { ""mode"": ""1"", ""test"":""test1,test,test2""},{ ""mode"": ""2"", ""test"": ""test3"" }]}"; 

Для того, чтобы получить значение Dest Я использую следующий метод.

var json_serializer = new JavaScriptSerializer(); 
      Dictionary<string, object> dictionary = json_serializer.Deserialize<Dictionary<string, object>>(json); 

    public Dictionary<string, object> GetObject(Dictionary<string, object> view, string name) 
      { 
       Dictionary<string, object> result = new Dictionary<string, object>(); 
       object value = null; 
       foreach (KeyValuePair<string, object> pair in view) 
       { 
        Type type = pair.Value.GetType(); 
        if (pair.Key == name) 
        { 
         **Dictionary<string, object> child = (System.Collections.Generic.Dictionary<string, object>)pair.Value;** 
         result = GetObject(child, name); 
         if (result != null) 
         { 
          break; 
         } 
        } 
        else 
        { 
        } 
       } 
       return result; 
      } 

Я получаю сообщение об ошибке в словаре ребенка линии = (System.Collections.Generic.Dictionary) pair.Value;. Ошибка говорит: «Невозможно передать объект типа« System.Collections.ArrayList »для ввода« System.Collections.Generic.Dictionary`2 [System.String, System.Object] ».

Кто-нибудь знает, как это исправить?

+4

Casting не меняет тип объектов. См. ['Enumerable.ToDictionary'] (http://msdn.microsoft.com/en-us/library/bb549277.aspx) - вам нужно будет выбрать правила для выбора ключа/значения из каждого элемента в последовательности , – user2246674

+0

Можете ли вы предоставить образец? – user1357872

+0

Сначала начните с определения того, что находится в Key и Value или 'pair', и как эти значения должны быть преобразованы в ключи и значения в новый словарь. Из-за уродливой нетипизированной природы вам придется сначала наложить 'pair.Value' на' ArrayList'. например 'child = ((ArrayList) pair.Value) .ToDictionary (p =>/* селектор для ключа * /, p =>/* селектор для значения * /)'. – user2246674

ответ

1

Предполагая tset в массиве опечатка, и это на самом деле test, вы можете использовать concerete классы ....

string json = @"{""dest"":[ { ""mode"": ""1"", ""test"":""test1,test,test2""},{ ""mode"": ""2"", ""test"": ""test3"" }]}"; 
var obj = new JavaScriptSerializer().Deserialize<MyObject>(json); 

public class Dest 
{ 
    public string mode { get; set; } 
    public string test { get; set; } 
} 

public class MyObject 
{ 
    public List<Dest> dest { get; set; } 
} 
+0

Итак, если мой json похож на ниже, как я могу получить значение dest? String json = @ "{" id ":" 101 "," "dest" ": [{" "mode" ":" "1" " , "test" ":" test1, test, test2 ""}, {"" mode "": "" 2 "", "test" ":" test3 ""}]} "; – user1357872

+0

@ user1357872: Json неверен –

+0

извините..Я не смог найти никакой ошибки. – user1357872