using System; using System.Numerics; using System.Text.Json; using System.Text.Json.Serialization; namespace Questionable.Model.Common.Converter; public sealed class VectorConverter : JsonConverter { public override Vector3 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) { throw new JsonException(); } Vector3 result = default(Vector3); while (reader.Read()) { switch (reader.TokenType) { case JsonTokenType.PropertyName: { string text = reader.GetString(); if (text == null || !reader.Read()) { throw new JsonException(); } switch (text) { case "X": result.X = reader.GetSingle(); break; case "Y": result.Y = reader.GetSingle(); break; case "Z": result.Z = reader.GetSingle(); break; default: throw new JsonException(); } break; } case JsonTokenType.EndObject: return result; default: throw new JsonException(); } } throw new JsonException(); } public override void Write(Utf8JsonWriter writer, Vector3 value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteNumber("X", value.X); writer.WriteNumber("Y", value.Y); writer.WriteNumber("Z", value.Z); writer.WriteEndObject(); } }