using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using RulesEngine.Models;
public string JsonPath {get;set;}
public Rule Test {get;set;}
public class FieldRulePaths
public string FieldName {get;set;}
public List<RulePath> RulePaths {get; set;} = new List<RulePath>();
public static void Main()
var json = "{\"customer\":{\"firstName\":\"LEEROY\",\"lastName\":\"JENKINS\",\"serviceability\":{\"groups\":[{\"group\":\"B\"},{\"group\":\"F\",},{\"group\":\"A\"}]}}}";
public static void DemoRules(string json)
var rules = new List<Rule>
RuleName = "Customer not null check",
SuccessEvent = "Customer was not null",
ErrorMessage = "Customer was null",
Expression = "input1.First().customer != null",
RuleExpressionType = RuleExpressionType.LambdaExpression,
RuleName = "Customer serviceability null check",
SuccessEvent = "Customer serviceability not null",
ErrorMessage = "Customer serviceability was null",
Expression = "input1.First().customer.serviceability != null",
RuleExpressionType = RuleExpressionType.LambdaExpression,
RuleName = "Customer serviceability groups null check",
SuccessEvent = "Customer serviceability groups not null",
ErrorMessage = "Customer serviceability groups was null",
Expression = "input1.First().customer.serviceability.groups != null",
RuleExpressionType = RuleExpressionType.LambdaExpression,
RuleName = "Customer serviceability groups Any works",
SuccessEvent = "Any worked",
ErrorMessage = "Any failed",
Expression = "input1.First().customer.serviceability.groups.Where(g => g.group == \"B\")",
RuleExpressionType = RuleExpressionType.LambdaExpression,
RuleName = "Customer should have group B",
SuccessEvent = "Customer has Group B",
ErrorMessage = "Error determining if Customer has Group B",
Expression = "input1.First().customer.groups.Any(t => t.group == @0, \"B\")",
RuleExpressionType = RuleExpressionType.LambdaExpression,
RuleName = "Customer should have group B attempt 2",
SuccessEvent = "Customer has Group B",
ErrorMessage = "Error determining if Customer has Group B",
Expression = "input1.First().customer.groups.Any(\"group == B\")",
RuleExpressionType = RuleExpressionType.LambdaExpression,
RuleName = "Customer should have group B attempt 3",
SuccessEvent = "Customer has Group B",
ErrorMessage = "Error determining if Customer has Group B",
Expression = "input1.First().customer.groups.Any(@group == \"B\")",
RuleExpressionType = RuleExpressionType.LambdaExpression,
var workflows = new List<Workflow>
WorkflowName = "Customer Checks",
dynamic input1 = JsonConvert.DeserializeObject<ExpandoObject>(json);
var rulesEngine = new RulesEngine.RulesEngine(workflows.ToArray(), null);
var results = rulesEngine.ExecuteAllRulesAsync("Customer Checks", new List<object>
if (input1.customer == null)
Console.WriteLine("customer should be null");
foreach (var result in results)
Console.WriteLine($"{result.Rule.SuccessEvent}");
else if (result.ExceptionMessage != "")
Console.WriteLine($"{result.ExceptionMessage}");
Console.WriteLine($"{result.Rule.ErrorMessage}");
Console.WriteLine("Done.");
Console.WriteLine(ex.Message);