namespace YandexMusic.API.Models.Pins.Items { public sealed class YPinConverter : JsonConverter { private YPin GetEvent(JToken jObject) { YPin pin; YPinType type = jObject["type"] .ToObject(); switch (type) { case YPinType.Album: pin = jObject.ToObject>(); break; case YPinType.Artist: pin = jObject.ToObject>(); break; case YPinType.Playlist: pin = jObject.ToObject>(); break; case YPinType.Wave: pin = jObject.ToObject>(); break; default: pin = jObject.ToObject(); break; } return pin; } public override bool CanConvert(Type objectType) { return typeof(YPin).IsAssignableFrom(objectType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; return JArray.Load(reader) .Select(GetEvent) .ToList(); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } } public abstract class YPin { public YPinType Type { get; set; } } public class YPin : YPin { public T Data { get; set; } } }