2016-07-17 2 views
0

Я пытаюсь Deserialize этого JSon кода:Deserialize JSON с «случайным» ключом

"hotkeyOptions": { 
     "autoSwitchHotkeyPreset": true, 
     "currentHotkeySetName": "Paladin", 
     "hotkeySets": { 
      "Newbie": { 
       "F10": { 
        "useObject": 5645, 
        "useType": "SelectUseTarget" 
       }, 
       "F11": { 
        "useObject": 5456, 
        "useType": "SelectUseTarget" 
       }, 
       "F12": { 
        "useObject": 7565, 
        "useType": "Use" 
       }, 
       "F8": { 
        "useObject": 7547, 
        "useType": "UseOnYourself" 
       }, 
       "F9": { 
        "useObject": 4214, 
        "useType": "SelectUseTarget" 
       } 
      }, 
      "Mega Mage": { 
       "Ctrl+F1": { 
        "chatText": "heal friend", 
        "sendAutomatically": true 
       }, 
       "Ctrl+F4": { 
        "chatText": "mega haste", 
        "sendAutomatically": true 
       }, 
       "F1": { 
        "chatText": "haste", 
        "sendAutomatically": true 
       }, 
       "F10": { 
        "useObject": 3412, 
        "useType": "SelectUseTarget" 
       }, 
       "F11": { 
        "useObject": 5343, 
        "useType": "SelectUseTarget" 
       }, 
      }, 
      "Paladin": { 
       "F1": { 
        "useObject": 4643, 
        "useType": "UseOnYourself" 
       }, 
       "F2": { 
        "useObject": 6433, 
        "useType": "UseOnYourself" 
       }, 
       "F3": { 
        "chatText": "haste", 
        "sendAutomatically": true 
       }, 
       "F5": { 
        "chatText": "heal", 
        "sendAutomatically": true 
       } 
      }, 
      "Mage": { 
       "F1": { 
        "chatText": "explosion", 
        "sendAutomatically": true 
       }, 
       "F12": { 
        "useObject": 3003, 
        "useType": "SelectUseTarget" 
       } 
      }, 
      "Knight": { 
       "Ctrl+F1": { 
        "chatText": "poke go", 
        "sendAutomatically": true 
       }, 
       "F1": { 
        "chatText": "haste", 
        "sendAutomatically": true 
       }, 
      } 
     } 
    } 

У меня возникли проблемы при попытке прочитать их свойства и значение, но я не могу получить имя свойства, как «новичок», «Мега Маг», «Паладин» и т.д.

Это то, что я сейчас:

JToken token = JObject.Parse(json); 
JToken hotkeyConfig = token.SelectToken("hotkeyOptions"); 

JToken activeHotkey = hotkeyConfig.SelectToken("currentHotkeySetName"); 
this.ActiveHotkeySet = activeHotkey.Value<string>(); //This is working, returning the "Paladin" string 

JToken hotkeysSet = hotkeyConfig.SelectToken("hotkeySets"); 
foreach (var set in hotkeysSet.Children()) { 
    foreach (JObject obj in set.Children<JObject>()) { 
     foreach(JProperty prop in obj.Properties()) { 
      var teste = prop.Name; 
     } 
    } 
} 

с кодом выше я достигающего сочетание клавиш, как «F10» , «Ctrl + F1», но не может получить «Родительское имя», (Новичок).

Есть простой способ прочесть такую ​​структуру JSON?

ответ

1

Вы можете использовать Newtonsoft. И в основном я предпочитаю разбирать json для классов. Пример для решения вашей проблемы:

Сначала определим классы для десериализации:

public class Hotkeys 
{ 
    [JsonProperty("hotkeyOptions")] 
    public HotkeyOptions HotkeyOptions { get; set; } 
} 

public class HotkeyOptions 
{ 
    [JsonProperty("autoSwitchHotkeyPreset")] 
    public bool AutoSwitchHotkeyPreset { get; set; } 

    [JsonProperty("currentHotkeySetName")] 
    public string CurrentHotkeySetName { get; set; } 

    [JsonProperty("hotkeySets")] 
    public Dictionary<string, JObject> HotkeySets { get; set; } 
} 

Тогда вы можете прочитать это следующим образом:

var hotkeys = JsonConvert.DeserializeObject<Hotkeys>(json); 

foreach(var hotkeySet in hotkeys.HotkeyOptions.HotkeySets) 
{ 
    string hotkeySetName = hotkeySet.Key; // "Newbie" etc.. 
    foreach(var hotkey in hotkeySet.Value) 
    { 
     string hotkeyString = hotkey.Key; // "F10" etc.. 
    } 
} 
+1

Это именно то, что мне нужно, у меня были проблемы с десериализации в Словарь-объект, ваш пример отлично работал, спасибо! – Kyore

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