using System.Collections.Generic;
using Newtonsoft.Json.Linq;
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "categoryListRecursive")]
public List<Category>? SubCategories { get; set; } = null;
public static List<Category>? FromJArray(JArray jArray) {
List<Category>? categories = null;
foreach(JObject category in jArray) {
if(category != null && category.TryGetValue("id", out JToken id) && category.TryGetValue("name", out JToken name) && category.TryGetValue("categoryListRecursive", out JToken subCategories)) {
Category nextCategory = new() {
Name = name.ToObject<string>(),
if(subCategories is JArray subCategoryList)
nextCategory.SubCategories = (subCategoryList.Count > 0) ? FromJArray(subCategoryList) : new List<Category>() {};
categories = new List<Category>() {} ;
categories.Add(nextCategory);
public override string ToString() {
return JsonConvert.SerializeObject(this, Formatting.Indented);
public static void Main() {
string json = @"[{""id"":2,""name"":""Men"",""categoryListRecursive"":[{""id"":5,""name"":""Pants"",""categoryListRecursive"":null},{""id"":6,""name"":""Shirts"",""categoryListRecursive"":null}]},{""id"":3,""name"":""Women"",""categoryListRecursive"":[{""id"":7,""name"":""Pants"",""categoryListRecursive"":null},{""id"":8,""name"":""Shirts"",""categoryListRecursive"":null}]},{""id"":4,""name"":""Accessories"",""categoryListRecursive"":[]}]";
var categories = Category.FromJArray(JArray.Parse(json)) ?? new();
foreach(var category in categories)
Console.WriteLine("{0}\n--------------------------\n", category);