using System; using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; namespace GB5Shared.FileUpload { internal sealed class AttachmentEnvelopeConverter : JsonConverter { public override AttachmentResolutionEnvelope? Read( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Null) return null; if (reader.TokenType == JsonTokenType.StartArray) { // Frontend sends [] when no attachments — treat as null using var skip = JsonDocument.ParseValue(ref reader); return null; } using var doc = JsonDocument.ParseValue(ref reader); var result = new AttachmentResolutionEnvelope(); if (doc.RootElement.TryGetProperty("LevelMappings", out var lm)) result.LevelMappings = lm.Deserialize>(options) ?? new(); return result; } public override void Write( Utf8JsonWriter writer, AttachmentResolutionEnvelope value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WritePropertyName("LevelMappings"); JsonSerializer.Serialize(writer, value.LevelMappings, options); writer.WriteEndObject(); } } }