using Newtonsoft.Json.Linq; using Newtonsoft.Json; namespace MikuSB.Data.Config; class IntDictionaryConverter : JsonConverter> { public override Dictionary? ReadJson(JsonReader reader, Type objectType, Dictionary? existingValue, bool hasExistingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartArray) { JArray.Load(reader); return new Dictionary(); } else if (reader.TokenType == JsonToken.StartObject) { var obj = JObject.Load(reader); var dict = new Dictionary(); foreach (var prop in obj.Properties()) { if (int.TryParse(prop.Name, out var key)) { dict[key] = prop.Value.ToObject(); } } return dict; } return new Dictionary(); } public override void WriteJson(JsonWriter writer, Dictionary? value, JsonSerializer serializer) { writer.WriteStartObject(); foreach (var kv in value!) { writer.WritePropertyName(kv.Key.ToString()); writer.WriteValue(kv.Value); } writer.WriteEndObject(); } }