using Newtonsoft.Json.Linq;
using System.Collections;
using System.Collections.Generic;
namespace JsonConverterTest
static void Main(string[] args)
var t1 = JsonConvert.DeserializeObject<Response<Simple>>(s1);
var t2 = JsonConvert.DeserializeObject<Response<Simple>>(s2);
public int Id { get; set; }
[JsonProperty("version")]
public string Version { get; set; }
[JsonConverter(typeof(SingleOrArrayConverter))]
public List<T> Data { get; set; }
public Links Links { get; set; }
public class SingleOrArrayConverter : JsonConverter
public override bool CanConvert(Type objectType)
throw new NotImplementedException();
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JToken token = JToken.Load(reader);
if (token["items"]?.Type == JTokenType.Array)
return token["items"].ToObject(objectType);
var genericType = objectType.GenericTypeArguments[0];
var listType = typeof(List<>);
var constructedListType = listType.MakeGenericType(genericType);
var instance = (IList)(Activator.CreateInstance(constructedListType));
instance.Add(token.ToObject(genericType));
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();