using Newtonsoft.Json; using Newtonsoft.Json.Linq; public class ItemConverter : JsonConverter { //Overrides the ReadJson function. public override Item ReadJson(JsonReader reader, Type objectType, Item? existingValue, bool hasExistingValue, JsonSerializer serializer) { //Load the raw JSON object from the reader. JObject obj = JObject.Load(reader); // Read the "Type" field string? type = obj["Type"]?.ToString(); //Create a temporary item object. Item item; //Uses the Type field to determine what kind of object to create, to allow for a mixed list. switch (type) { case "Healing": item = new HealingItem("", "", 0); break; case "Support": item = new SupportItem("", ""); break; default: throw new JsonSerializationException($"Unknown item type: {type}"); } // Populate the item with values from JSON serializer.Populate(obj.CreateReader(), item); return item; } //Overrides the default WriteJson method to allow for our different items. public override void WriteJson(JsonWriter writer, Item? value, JsonSerializer serializer) { JObject obj = JObject.FromObject(value, serializer); obj.WriteTo(writer); } }