using Newtonsoft.Json.Linq;
using System.Collections.Generic;
public static void Main()
string jsonWithPosts = " {\"posts\": [{ \"id\" : 1, \"name\":\"post1\" },{ \"id\" : 1, \"name\":\"post1\" }]}";
var settings = new JsonSerializerSettings();
settings.Converters = new [] { new PostsConverter() };
JsonConvert.DeserializeObject<GetReaderResponse>(jsonWithPosts, settings);
Console.WriteLine("With posts:");
string jsonWithoutPosts = "{\"posts\": false}";
Console.WriteLine("Without posts:");
GetReaderResponse resp2 =
JsonConvert.DeserializeObject<GetReaderResponse>(jsonWithoutPosts, settings);
public class PostsConverter : JsonConverter
public override object ReadJson(
JsonSerializer serializer)
JToken val = JValue.ReadFrom(reader);
if (val.Type == JTokenType.Array)
result = val.ToObject<IEnumerable<ReaderPost>>();
else if (val.Type == JTokenType.Boolean)
result = Enumerable.Empty<ReaderPost>();
public override void WriteJson(
JsonSerializer serializer)
throw new NotImplementedException();
public override bool CanConvert (Type type)
return typeof(IEnumerable<ReaderPost>).IsAssignableFrom(type);
public override bool CanRead
public class GetReaderResponse
public IEnumerable<ReaderPost> posts { get; set; }
public int id { get; set; }
public string name { get; set; }