이 JSON 파일을 개체로 deserialize하려고하는데 작동하지 않습니다.Json Deserialize Object crashing
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 추측.
귀하의 코드는 컴파일되지 않는 JSON 클래스는 다음과 같이합니다. 단축키 설정이란 무엇입니까? 코드를 읽는 것만으로 뭔가 잘못 됐습니까? 하나의 JSON 파일을 가지고있는 동안 왜 객체를 여러 번 deserialize한다고 부르는가? deserialize를 한 번 호출하면 전체 객체 그래프를 얻을 수 있습니다. –
"Player 1", "Player 2"등의 키가 모두 동적이기 때문에 Json.Parse()라고 불리우며 여러 번 호출됩니다. 따라서 반드시 그 이름을 가져올 필요는 없습니다. 어떤 이름, 그리고 사전 deserialize 내가 그 이름 (일하는)을 얻는 방법을 찾았지만, 내가 그것을 가치를 deserialize하려고 할 때 – Cartel
당신은 우리가 컴파일하고 실행할 수있는 repro을 얻을 수 있습니까? –