Fix OpenShockHttp: Wrong json caused Bad Request
Get OpenShock Shockers from API. Save Shockers for PiShock and OpenShock in different structs Implement Action Queue, to avoid synchronous actions getting lost. Moved SerialPortInfo to own file Created ShockerJsonConverter Better separation of Devices/APIs and Shockers
This commit is contained in:
48
CShocker/Shockers/Additional/ShockerJsonConverter.cs
Normal file
48
CShocker/Shockers/Additional/ShockerJsonConverter.cs
Normal file
@ -0,0 +1,48 @@
|
||||
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(IShocker));
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
name = jo.SelectToken("name")!.Value<string>()!,
|
||||
id = jo.SelectToken("id")!.Value<string>()!,
|
||||
rfId = jo.SelectToken("rfId")!.Value<short>(),
|
||||
model = (OpenShockShocker.OpenShockModel)jo.SelectToken("model")!.Value<byte>(),
|
||||
createdOn = jo.SelectToken("createdOn")!.Value<DateTime>(),
|
||||
isPaused = jo.SelectToken("isPaused")!.Value<bool>()
|
||||
};
|
||||
}
|
||||
else //PiShockShocker
|
||||
{
|
||||
return new PiShockShocker()
|
||||
{
|
||||
Code = jo.SelectToken("Code")!.Value<string>()!
|
||||
};
|
||||
}
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
public override bool CanWrite => false;
|
||||
|
||||
/// <summary>
|
||||
/// Don't call this
|
||||
/// </summary>
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
{
|
||||
throw new Exception("Dont call this");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user