using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
""title"": ""My most recent drawing. Spent over 100 hours."",
""link"": ""http://i.imgur.com/OUHDm.jpg"",
""title"": ""Imgur Office"",
""link"": ""http://alanbox.imgur.com/a/lDRB2"",
""link"": ""http://i.imgur.com/24nLu.jpg""
""link"": ""http://i.imgur.com/Ziz25.jpg""
""link"": ""http://i.imgur.com/9tzW6.jpg""
List<GalleryItem> items = JsonConvert.DeserializeObject<List<GalleryItem>>(json, new GalleryItemConverter());
foreach (GalleryItem item in items)
Console.WriteLine("id: " + item.id);
Console.WriteLine("title: " + item.title);
Console.WriteLine("link: " + item.link);
GalleryAlbum album = (GalleryAlbum)item;
Console.WriteLine("album images (" + album.images_count + "):");
foreach (GalleryImage image in album.images)
Console.WriteLine(" id: " + image.id);
Console.WriteLine(" link: " + image.link);
public class GalleryItemConverter : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(GalleryItem).IsAssignableFrom(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JObject jo = JObject.Load(reader);
bool? isAlbum = (bool?)jo["is_album"];
if (isAlbum.GetValueOrDefault())
item = new GalleryAlbum();
item = new GalleryImage();
serializer.Populate(jo.CreateReader(), item);
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();
public abstract class GalleryItem
public string id { get; set; }
public string title { get; set; }
public string link { get; set; }
public bool is_album { get; set; }
public class GalleryImage : GalleryItem
public class GalleryAlbum : GalleryItem
public int images_count { get; set; }
public List<GalleryImage> images { get; set; }