using System; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using StardewModdingAPI.Framework.Models; namespace StardewModdingAPI.Framework.Serialisation.SmapiConverters { /// Handles deserialisation of arrays. internal class ModCompatibilityArrayConverter : JsonConverter { /********* ** Accessors *********/ /// Whether this converter can write JSON. public override bool CanWrite => false; /********* ** Public methods *********/ /// Get whether this instance can convert the specified object type. /// The object type. public override bool CanConvert(Type objectType) { return objectType == typeof(ModCompatibility[]); } /********* ** Protected methods *********/ /// Read the JSON representation of the object. /// The JSON reader. /// The object type. /// The object being read. /// The calling serializer. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { List result = new List(); foreach (JProperty property in JObject.Load(reader).Properties()) { string range = property.Name; ModStatus status = (ModStatus)Enum.Parse(typeof(ModStatus), property.Value.Value(nameof(ModCompatibility.Status))); string reasonPhrase = property.Value.Value(nameof(ModCompatibility.ReasonPhrase)); result.Add(new ModCompatibility(range, status, reasonPhrase)); } return result.ToArray(); } /// Writes the JSON representation of the object. /// The JSON writer. /// The value. /// The calling serializer. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new InvalidOperationException("This converter does not write JSON."); } } }