#if MODULE_REMOTE_CONFIG using Newtonsoft.Json; using System.Collections.Generic; namespace Watermelon { [System.Serializable] [JsonConverter(typeof(IAPContainerConverter))] public class IAPRemoteConfigData : RemoteConfigData { public override string Key => "iaps"; public override bool PrettyPrint => true; [JsonProperty("price")] public List> SerializedList => GenerateSerializedList(); [JsonIgnore] public List array = new() { new IAP { id = "com.product.test.id", price = 1.99f }, }; private List> GenerateSerializedList() { List> list = new List>(); foreach (IAP c in array) { list.Add(new Dictionary { [c.id] = c.price }); } return list; } public IAP GetOverride(string iapID) { if (array != null) { foreach (IAP iap in array) { if (iap.id == iapID) { return iap; } } } return null; } public class IAPContainerConverter : JsonConverter { public override void WriteJson(JsonWriter writer, IAPRemoteConfigData value, JsonSerializer serializer) { writer.WriteStartObject(); writer.WritePropertyName("price"); writer.WriteStartArray(); foreach (var currency in value.array) { writer.WriteStartObject(); writer.WritePropertyName(currency.id); writer.WriteValue(currency.price); writer.WriteEndObject(); } writer.WriteEndArray(); writer.WriteEndObject(); } public override IAPRemoteConfigData ReadJson(JsonReader reader, System.Type objectType, IAPRemoteConfigData existingValue, bool hasExistingValue, JsonSerializer serializer) { IAPRemoteConfigData container = new IAPRemoteConfigData(); container.array.Clear(); while (reader.Read()) { if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "price") { reader.Read(); // Move to StartArray while (reader.Read() && reader.TokenType != JsonToken.EndArray) { if (reader.TokenType == JsonToken.StartObject) { reader.Read(); // Move to PropertyName string id = reader.Value.ToString(); reader.Read(); // Move to Value float price = System.Convert.ToSingle(reader.Value); reader.Read(); // Move to EndObject container.array.Add(new IAP { id = id, price = price }); } } } if (reader.TokenType == JsonToken.EndObject) break; } return container; } } [System.Serializable] public class IAP { public string id; public float price; } } } #endif