Ionite
9 months ago
3 changed files with 59 additions and 2 deletions
@ -0,0 +1,49 @@
|
||||
using System.Reflection; |
||||
using System.Text.Json; |
||||
using System.Text.Json.Serialization; |
||||
using StabilityMatrix.Core.Models.Api.Comfy.NodeTypes; |
||||
|
||||
namespace StabilityMatrix.Core.Converters.Json; |
||||
|
||||
public class NodeConnectionBaseJsonConverter : JsonConverter<NodeConnectionBase> |
||||
{ |
||||
/// <inheritdoc /> |
||||
public override NodeConnectionBase Read( |
||||
ref Utf8JsonReader reader, |
||||
Type typeToConvert, |
||||
JsonSerializerOptions options |
||||
) |
||||
{ |
||||
// Read as Data array |
||||
reader.Read(); |
||||
var data = new object[2]; |
||||
reader.Read(); |
||||
data[0] = reader.GetString() ?? throw new JsonException("Expected string for node name"); |
||||
reader.Read(); |
||||
data[1] = reader.GetInt32(); |
||||
reader.Read(); |
||||
|
||||
if (Activator.CreateInstance(typeToConvert) is not NodeConnectionBase instance) |
||||
{ |
||||
throw new JsonException($"Failed to create instance of {typeToConvert}"); |
||||
} |
||||
|
||||
var propertyInfo = |
||||
typeToConvert.GetProperty("Data", BindingFlags.Public | BindingFlags.Instance) |
||||
?? throw new JsonException($"Failed to get Data property of {typeToConvert}"); |
||||
|
||||
propertyInfo.SetValue(instance, data); |
||||
|
||||
return instance; |
||||
} |
||||
|
||||
/// <inheritdoc /> |
||||
public override void Write(Utf8JsonWriter writer, NodeConnectionBase value, JsonSerializerOptions options) |
||||
{ |
||||
// Write as Data array |
||||
writer.WriteStartArray(); |
||||
writer.WriteStringValue(value.Data?[0] as string); |
||||
writer.WriteNumberValue((int)value.Data?[1]!); |
||||
writer.WriteEndArray(); |
||||
} |
||||
} |
Loading…
Reference in new issue