2014-10-07 5 views
0

У меня есть следующие JSON:Как я десериализовать этот словарь <строка, строка []>

[ 
    { 
     "Key": "tradepack", 
     "Value": [ 
      "Select Tradepack" 
     ] 
    }, 
    { 
     "Key": "route", 
     "Value": [ 
      "Select Route" 
     ] 
    }, 
    { 
     "Key": "recall", 
     "Value": [ 
      "Select Recall Location" 
     ] 
    }, 
    { 
     "Key": "stones", 
     "Value": [ 
      "True" 
     ] 
    }, 
    { 
     "Key": "quickstep", 
     "Value": [ 
      "True" 
     ] 
    }, 
    { 
     "Key": "dreamingdonkey", 
     "Value": [ 
      "True" 
     ] 
    }, 
    { 
     "Key": "meleeskills", 
     "Value": [] 
    }, 
    { 
     "Key": "rangedskills", 
     "Value": [] 
    }, 
    { 
     "Key": "buffedskills", 
     "Value": [] 
    } 
] 

Im в настоящее время с помощью этого

String data = System.IO.File.ReadAllText(Application.StartupPath + "\\folder\\Data\\Config\\config.txt"); 
return JsonConvert.DeserializeObject<Dictionary<string, object[]>>(data); 

но я получаю следующую ошибку

Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'System.Collections.Generic.Dictionary`2 [System.String, System.Object []]', потому что для этого требуется JS ON (например, {"name": "value"}) для десериализации. Чтобы исправить эту ошибку, либо смените JSON на объект JSON (например, {"name": "value"}), либо измените десериализованный тип на массив или тип, реализующий интерфейс коллекции (например, ICollection, IList), например List, можно десериализовать из массива JSON. JsonArrayAttribute также может быть добавлен к типу, чтобы заставить его десериализоваться из массива JSON. Путь «», строка 1, позиция 1.

Любой уход объяснить, как я, как бы решить эту проблему им в NEWB в C# особенно сериализации

ответ

-1

Ваших данных больше похожи на KeyValuePair<string, string[]>[]. Вы можете попробовать десериализацию, а затем создать словарь на основе результата.

var kvps = JsonConvert.DeserializeObject<KeyValuePair<String, String[]>[]>(data); 
return kvps.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value); 
3

Ваш JSON массив/список. Так что вам нужно десериализация что-то вроде этого List<Dictionary<string, object>>

var data = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json); 

ИЛИ

var dict = JArray.Parse(json) 
      .Select(x => x.ToObject<KeyValuePair<string, string[]>>()) 
      .ToDictionary(x => x.Key, x => x.Value); 
+5

@Downvoter, любые комментарии? так как я тестировал его перед публикацией, и он работает с учетом json. – EZI

Смежные вопросы