using System.Text.Json; using System.Text.Json.Serialization; namespace YandexMusic.API.Models.Common.Cover; public class YCoverConverter : JsonConverter { public override YCover? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) return null; using var doc = JsonDocument.ParseValue(ref reader); var root = doc.RootElement; var type = root.TryGetProperty("type", out var t) ? t.GetString() : null; if (root.TryGetProperty("error", out _)) type = "error"; return type switch { "color" => JsonSerializer.Deserialize(root.GetRawText(), options), "error" => JsonSerializer.Deserialize(root.GetRawText(), options), "from-artist-photos" or "from-album-cover" => JsonSerializer.Deserialize(root.GetRawText(), options), "pic" => JsonSerializer.Deserialize(root.GetRawText(), options), "mosaic" => JsonSerializer.Deserialize(root.GetRawText(), options), _ => JsonSerializer.Deserialize(root.GetRawText(), options) }; } public override void Write(Utf8JsonWriter writer, YCover value, JsonSerializerOptions options) => JsonSerializer.Serialize(writer, value, options); } [JsonConverter(typeof(YCoverConverter))] public class YCover { public YCoverType Type { get; set; } }