45 lines
1.7 KiB
C#

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
namespace PrizeSystem
{
public class PrizeConverter : JsonConverter<Prize>
{
public override Prize ReadJson(JsonReader reader, Type objectType, Prize existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var jsonObject = JObject.Load(reader);
var prizeTypeToken = jsonObject["PrizeType"];
if (prizeTypeToken == null)
throw new JsonSerializationException("Missing PrizeType field");
var prizeType = prizeTypeToken.ToObject<PrizeType>();
// Создаем объект нужного типа
Prize prize = prizeType switch
{
PrizeType.None => new EmptyPrize(),
PrizeType.Qr => new QrPrize(""), // временный, заполним ниже
PrizeType.VitrinaBox => new VitrinaPrize(Array.Empty<int>()),
PrizeType.Ticket or PrizeType.Marbles or PrizeType.Hopper =>
new CountablePrize(CountablePrizeType.Ticket, 0), // временный
_ => throw new NotSupportedException($"Unknown prize type: {prizeType}")
};
// Заполняем поля через стандартную десериализацию
using (var subReader = jsonObject.CreateReader())
{
serializer.Populate(subReader, prize);
}
return prize;
}
public override void WriteJson(JsonWriter writer, Prize value, JsonSerializer serializer)
{
var jsonObject = JObject.FromObject(value, serializer);
jsonObject.WriteTo(writer);
}
}
}