using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
DeserializeAndDump(json1, "-- first case --");
DeserializeAndDump(json2, "-- second case --");
static void DeserializeAndDump(string json, string msg)
var gnro = JsonConvert.DeserializeObject<GenericNamedResponseObject>(json);
Console.WriteLine("(No items)");
foreach (var item in gnro.Info)
Console.WriteLine($"{item.Id} {item.Name}");
public class GenericNamedResponseObject
public int? Code { get; set; }
public string ErrorMessage { get; set; }
private IList<GenericResponseLineItem> _info;
[JsonConverter(typeof(SafeArrayConverter<GenericResponseLineItem>))]
public IList<GenericResponseLineItem> Info
get => _info ?? (_info = new List<GenericResponseLineItem>());
public class GenericResponseLineItem
public int Id { get; set; }
public string Name { get; set; }
public class SafeArrayConverter<T> : JsonConverter
public override bool CanConvert(Type objectType)
return (objectType == typeof(List<T>));
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
return token.ToObject<List<T>>();
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();