using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
""name"": ""Condition1"",
""name"": ""C1 ConditionA"",
""name"": ""Condition2"",
Rule[] rules = JsonConvert.DeserializeObject<Rule[]>(json, new RuleConverter());
private static void DumpRules(IEnumerable<Rule> rules, string indent = "")
foreach (Rule rule in rules)
Console.WriteLine(indent + rule.Name);
DumpRules(((Condition)rule).Rules, indent + " ");
public string Name { get; set; }
public List<Rule> Rules { get; set; }
public class RuleConverter : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(Rule).IsAssignableFrom(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
var jo = JObject.Load(reader);
if (jo["condition"] == null)
serializer.Populate(jo.CreateReader(), rule);
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();