using System; using System.Numerics; using System.Text.Json; using System.Text.Json.Serialization; namespace SmartNav.Model.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", RoundValue(value.X)); writer.WriteNumber("Y", RoundValue(value.Y)); writer.WriteNumber("Z", RoundValue(value.Z)); writer.WriteEndObject(); } private static float RoundValue(float value) { float num = MathF.Round(value, 6); if (!(MathF.Abs(num) < 1E-06f)) { return num; } return 0f; } }