using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public string rel { get; set; }
public string type { get; set; }
public string href { get; set; }
public string title { get; set; }
public class LinkElement : ILink
public string rel { get; set; }
public string type { get; set; }
public string href { get; set; }
public string title { get; set; }
public class LinkArray : ILink
public List<Link> Elements { get; set; }
public class LinkConverter : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(Link).IsAssignableFrom(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null)
return serializer.Deserialize<LinkArray>(reader);
return serializer.Deserialize<LinkElement>(reader);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();
[JsonConverter(typeof(LinkConverter))]
public ILink link { get; set; }
public static void Main()
var foo3 = JsonConvert.DeserializeObject<Entry>(json1);
var foo4 = JsonConvert.DeserializeObject<Entry>(json2);