using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text.Json; using System.Text.Json.Serialization; namespace Questionable.Model.Common.Converter; public sealed class StringListOrValueConverter : JsonConverter> { public override List Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) { int num = 1; List list = new List(num); CollectionsMarshal.SetCount(list, num); Span span = CollectionsMarshal.AsSpan(list); int index = 0; span[index] = reader.GetString(); return list; } if (reader.TokenType != JsonTokenType.StartArray) { throw new JsonException(); } reader.Read(); List list2 = new List(); while (reader.TokenType != JsonTokenType.EndArray) { list2.Add(reader.GetString()); reader.Read(); } return list2; } public override void Write(Utf8JsonWriter writer, List? value, JsonSerializerOptions options) { if (value == null) { writer.WriteNullValue(); return; } if (value.Count == 1) { writer.WriteStringValue(value[0]); return; } writer.WriteStartArray(); foreach (string item in value) { writer.WriteStringValue(item); } writer.WriteEndArray(); } }