49 lines
1.3 KiB
Markdown
49 lines
1.3 KiB
Markdown
# ConfigJson (Import / Export)
|
||
|
||
**Datei:** `ConfigJson.cs`
|
||
|
||
## Format
|
||
|
||
Menschenlesbares JSON mit `System.Text.Json` (`WriteIndented=true`, Enums als Strings via `JsonStringEnumConverter`).
|
||
|
||
```json
|
||
{
|
||
"version": 2,
|
||
"buttons": [
|
||
{
|
||
"index": 0,
|
||
"action": { "type": "HidKey", "data": 260 },
|
||
"led": { "r": 80, "g": 40, "b": 0, "anim": "ColorCycle", "period_ms": 4000 }
|
||
},
|
||
...
|
||
],
|
||
"encoders": [
|
||
{
|
||
"index": 0,
|
||
"sw": { "type": "None", "data": 0 },
|
||
"cw": { "type": "None", "data": 0 },
|
||
"ccw": { "type": "None", "data": 0 }
|
||
},
|
||
...
|
||
]
|
||
}
|
||
```
|
||
|
||
## Serialisierung
|
||
|
||
`ConfigJson.Serialize(cfg)` → JSON-String. Exportiert alle 20 Buttons + 4 Encoder vollständig.
|
||
|
||
## Deserialisierung
|
||
|
||
`ConfigJson.Deserialize(json, cfg)`:
|
||
- Prüft `version` – wirft `InvalidDataException` bei Mismatch
|
||
- Schreibt in bestehendes `DeviceConfig`-Objekt (kein `new`)
|
||
- Fehlende `buttons`/`encoders`-Arrays werden ignoriert (partial import möglich)
|
||
- Ungültige `index`-Werte werden übersprungen
|
||
|
||
## Anmerkungen
|
||
|
||
- `MacroTable` wird **nicht** exportiert (kein JSON-Format für Makros definiert)
|
||
- `data` enthält den `ushort`-Wert direkt (für HidKey z.B. `Keycode | (Modifier << 8)`)
|
||
- Die Datei ist kein Binärformat und kann manuell bearbeitet werden
|