123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using System.Text.Json;
- using System.Text.Json.Serialization;
- namespace Terminal.Gui;
- internal class DictionaryJsonConverter<T> : JsonConverter<Dictionary<string, T>>
- {
- public override Dictionary<string, T> 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<string, T> 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<string, T> value, JsonSerializerOptions options)
- {
- writer.WriteStartArray ();
- foreach (KeyValuePair<string, T> 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 ();
- }
- }
|