using CShocker.Devices.Abstract; using CShocker.Shockers.Abstract; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace CShocker.Shockers.Additional; public class ShockerJsonConverter : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(Shocker)); } public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); if (jo.ContainsKey("model")) //OpenShockShocker { return new OpenShockShocker( jo.SelectToken("api")!.ToObject()!, jo.SelectToken("name")!.Value()!, jo.SelectToken("id")!.Value()!, jo.SelectToken("rfId")!.Value(), (OpenShockShocker.OpenShockModel)jo.SelectToken("model")!.Value(), jo.SelectToken("createdOn")!.Value(), jo.SelectToken("isPaused")!.Value() ); } else //PiShockShocker { return new PiShockShocker( jo.SelectToken("api")!.ToObject()!, jo.SelectToken("Code")!.Value()! ); } throw new Exception(); } public override bool CanWrite => false; /// /// Don't call this /// public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) { throw new Exception("Dont call this"); } }