【发布时间】:2016-10-06 07:38:09
【问题描述】:
我正在尝试将此 JSON 文件反序列化为一个对象,但无法正常工作。
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());
}
}
但是我可以让 Hotkey 对象与 Json Deserialize 一起使用。我已经尝试了很多东西,这是我尝试的最后一个代码:
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”行中崩溃,说格式无效,所以我猜我的类结构中可能遗漏了一些东西。
【问题讨论】:
-
您的代码无法编译。什么是热键配置?只是通过阅读您的代码,有什么问题吗?为什么只有一个 JSON 文件,却要多次调用反序列化对象?一次反序列化调用应该能够为您获取整个对象图。
-
这只是Json.Parse(),它被称为“多次”,因为“玩家1”,“玩家2”等键都是动态的,所以不一定会获取这些名称,它可能是任何名称,并且字典反序列化是我发现获取该名称(工作)的方式,但是当我尝试反序列化值时它会崩溃
-
你能给我们一个可以编译和运行的repro吗?
-
您似乎缺少
ActionSetting类上的action属性。