KeyJsonConverter.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.Text.Json;
  3. using System.Text.Json.Serialization;
  4. namespace Terminal.Gui;
  5. class KeyJsonConverter : JsonConverter<Key> {
  6. public override Key Read (ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  7. {
  8. if (reader.TokenType == JsonTokenType.StartObject) {
  9. Key key = KeyCode.Unknown;
  10. while (reader.Read ()) {
  11. if (reader.TokenType == JsonTokenType.EndObject) {
  12. break;
  13. }
  14. if (reader.TokenType == JsonTokenType.PropertyName) {
  15. string propertyName = reader.GetString ();
  16. reader.Read ();
  17. switch (propertyName?.ToLowerInvariant ()) {
  18. case "key":
  19. if (reader.TokenType == JsonTokenType.String) {
  20. string keyValue = reader.GetString ();
  21. if (Key.TryParse (keyValue, out key)) {
  22. break;
  23. }
  24. throw new JsonException ($"Error parsing Key: {keyValue}.");
  25. }
  26. break;
  27. default:
  28. throw new JsonException ($"Unexpected Key property \"{propertyName}\".");
  29. }
  30. }
  31. }
  32. return key;
  33. }
  34. throw new JsonException ($"Unexpected StartObject token when parsing Key: {reader.TokenType}.");
  35. }
  36. public override void Write (Utf8JsonWriter writer, Key value, JsonSerializerOptions options)
  37. {
  38. writer.WriteStartObject ();
  39. writer.WriteString ("Key", value.ToString ());
  40. writer.WriteEndObject ();
  41. }
  42. }