MiniRPG/scripts/loaders/MoveConverter.cs

40 lines
1.3 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;
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);
}
}