44 lines
1.4 KiB
C#
44 lines
1.4 KiB
C#
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
public class MoveConverter : JsonConverter<Move>
|
|
{
|
|
//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;
|
|
|
|
case "MagicMove":
|
|
move = new MagicMove("", "", 0, 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);
|
|
}
|
|
}
|