using System.Text.Json; using System.Text.Json.Serialization; namespace Terminal.Gui; internal class DictionaryJsonConverter : JsonConverter> { public override Dictionary Read ( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options ) { if (reader.TokenType != JsonTokenType.StartArray) { throw new JsonException ($"Expected a JSON array (\"[ {{ ... }} ]\"), but got \"{reader.TokenType}\"."); } Dictionary dictionary = new (); while (reader.Read ()) { if (reader.TokenType == JsonTokenType.StartObject) { reader.Read (); if (reader.TokenType == JsonTokenType.PropertyName) { string key = reader.GetString (); reader.Read (); var value = JsonSerializer.Deserialize (ref reader, typeof (T), _serializerContext); dictionary.Add (key, (T)value); } } else if (reader.TokenType == JsonTokenType.EndArray) { break; } } return dictionary; } public override void Write (Utf8JsonWriter writer, Dictionary value, JsonSerializerOptions options) { writer.WriteStartArray (); foreach (KeyValuePair item in value) { writer.WriteStartObject (); //writer.WriteString (item.Key, item.Key); writer.WritePropertyName (item.Key); JsonSerializer.Serialize (writer, item.Value, typeof (T), _serializerContext); writer.WriteEndObject (); } writer.WriteEndArray (); } }