このJSONファイルをオブジェクトに逆シリアル化しようとしていますが、動作させることができません。Json Deserializeオブジェクトがクラッシュする
JSON:
"hotkeySets": {
"Player 1": {
"chatOff": [
{
"actionsetting": {
"action": "Togglelist"
},
"keysequence": "Ctrl+B"
},
{
"actionsetting": {
"action": "Copy"
},
"keysequence": "Ctrl+C"
},
{
"actionsetting": {
"useObject": 3308,
"useType": "SelectUseTarget"
},
"keysequence": "F10"
},
],
"chatOn": [
{
"actionsetting": {
"action": "Select All"
},
"keysequence": "Ctrl+A"
},
{
"actionsetting": {
"chatText": "heal friend",
"sendAutomatically": true
},
"keysequence": "Ctrl+F1"
},
{
"actionsetting": {
"action": "Copy"
},
"keysequence": "Ctrl+C"
},
]
},
"Player 2": {
"chatOff": [
{
"actionsetting": {
"action": "ToggleBattlelist"
},
"keysequence": "Ctrl+B"
},
{
"actionsetting": {
"action": "Copy"
},
"keysequence": "Ctrl+C"
},
}
}
そして、ここでは、私はそれをデシリアライズするために使用しているコードです:
JToken hotkeyConfig = JObject.Parse(json)
JToken hotkeysSet = hotkeyConfig.SelectToken("hotkeySets");
var sets = JsonConvert.DeserializeObject<Dictionary<string, JObject>>(hotkeysSet.ToString());
foreach (var hotkeySet in sets) {
string hotkeySetName = hotkeySet.Key; // "Player 1" etc..
List<Hotkey> hotkeys = new List<Hotkey>();
foreach (var hotkey in hotkeySet.Value) {
Hotkey htk = JsonConvert.DeserializeObject<Hotkey>(hotkey.Value.ToString());
}
}
しかし、私はホットキーオブジェクトはJSONデシリアライズで動作するように取得することができます。私は多くのことを試してみましたが、ここで私が試した最後のコードは次のとおりです。
public class Hotkey {
[JsonProperty("actionsetting")]
public ActionSetting actionsetting;
[JsonProperty("keysequence")]
public string Shortcut { get; set; }
public class ActionSetting {
public int useObject{ get; set; }
public string chatText { get; set; }
public string useType{ get; set; }
public bool sendAutomatically{ get; set; }
}
}
それは無効な形式を言って、ライン「JsonConvert.DeserializeObject」でクラッシュしていますので、おそらく私は私のクラス構造で何かが欠けていますI推測。
あなたのコードがコンパイルされません。 hotkeyConfigとは何ですか? コードを読むだけで何か間違っていますか? JSONファイルを1つしか持たないうちにオブジェクトを何回もデシリアライズするのはなぜですか?デシリアライズを1回呼び出すだけで、オブジェクトグラフ全体を取得できるはずです。 –
これはちょうどJson.Parse()です。 "Player 1"、 "Player 2"などのキーはすべて動的なので、必ずしもそれらの名前を取得するわけではありません。どんな名前でも、辞書はその名前を得るために見つけた方法であったが(作業中)、値を脱直列化しようとするとクラッシュする – Cartel
コンパイルして実行できる再プロンプトを手に入れることはできますか? –