using System; using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; namespace Questionable.Model.Questing.Converter; public sealed class ElementIdListConverter : JsonConverter> { public override List Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartArray) { throw new JsonException(); } reader.Read(); List list = new List(); while (reader.TokenType != JsonTokenType.EndArray) { if (reader.TokenType == JsonTokenType.Number) { list.Add(new QuestId(reader.GetUInt16())); } else { list.Add(ElementId.FromString(reader.GetString() ?? throw new JsonException())); } reader.Read(); } return list; } public override void Write(Utf8JsonWriter writer, List value, JsonSerializerOptions options) { writer.WriteStartArray(); foreach (ElementId item in value) { if (item is QuestId) { writer.WriteNumberValue(item.Value); } else { writer.WriteStringValue(item.ToString()); } } writer.WriteEndArray(); } }