using Newtonsoft.Json; using Newtonsoft.Json.Linq; public class MoveConverter : JsonConverter { //Overrides the ReadJson function. public override Move ReadJson(JsonReader reader, Type objectType, Move? 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. Move move; //Uses the Type field to determine what kind of object to create, to allow for a mixed list. switch (type) { case "PhysicalMove": move = new PhysicalMove("", "", 0, ""); break; default: throw new JsonSerializationException($"Unknown item type: {type}"); } // Populate the item with values from JSON serializer.Populate(obj.CreateReader(), move); return move; } //Overrides the default WriteJson method to allow for our different items. public override void WriteJson(JsonWriter writer, Move? value, JsonSerializer serializer) { JObject obj = JObject.FromObject(value, serializer); obj.WriteTo(writer); } }