using CShocker.Devices.Abstract; using CShocker.Devices.APIs; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace CShocker.Devices.Additional; public class ApiJsonConverter : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(Api)); } public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); DeviceApi apiType = (DeviceApi)jo.SelectToken("ApiType")!.Value(); switch (apiType) { case DeviceApi.OpenShockHttp: return jo.ToObject()!; case DeviceApi.OpenShockSerial: return jo.ToObject()!; case DeviceApi.PiShockHttp: return jo.ToObject()!; case DeviceApi.PiShockSerial: throw new NotImplementedException(); default: 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"); } }