using System; using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; namespace Tango.Portal.Chat.Web.Models { public sealed class FlexibleStringListConverter : JsonConverter> { public override List Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Null) return new List(); if (reader.TokenType == JsonTokenType.String) return new List { reader.GetString() ?? string.Empty }; if (reader.TokenType == JsonTokenType.StartArray) { var list = new List(); while (reader.Read()) { if (reader.TokenType == JsonTokenType.EndArray) break; if (reader.TokenType == JsonTokenType.String) list.Add(reader.GetString() ?? string.Empty); else { using var doc = JsonDocument.ParseValue(ref reader); list.Add(doc.RootElement.GetRawText()); } } return list; } using var any = JsonDocument.ParseValue(ref reader); return new List { any.RootElement.GetRawText() }; } public override void Write(Utf8JsonWriter writer, List value, JsonSerializerOptions options) { writer.WriteStartArray(); foreach (var s in value) writer.WriteStringValue(s); writer.WriteEndArray(); } } }