// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using Newtonsoft.Json; using Newtonsoft.Json.Converters; using RulesEngine.Models; using System; using System.Collections.Generic; using System.Dynamic; using System.IO; using static RulesEngine.Extensions.ListofRuleResultTreeExtension; namespace DemoApp { public class JSONDemo { public void Run() { Console.WriteLine($"Running {nameof(JSONDemo)}...."); var basicInfo = "{\"name\": \"hello\",\"email\": \"abcy@xyz.com\",\"creditHistory\": \"good\",\"country\": \"canada\",\"loyaltyFactor\": 3,\"totalPurchasesToDate\": 10000}"; var orderInfo = "{\"totalOrders\": 5,\"recurringItems\": 2}"; var telemetryInfo = "{\"noOfVisitsPerMonth\": 10,\"percentageOfBuyingToVisit\": 15}"; var converter = new ExpandoObjectConverter(); dynamic input1 = JsonConvert.DeserializeObject(basicInfo, converter); dynamic input2 = JsonConvert.DeserializeObject(orderInfo, converter); dynamic input3 = JsonConvert.DeserializeObject(telemetryInfo, converter); var inputs = new dynamic[] { input1, input2, input3 }; var files = Directory.GetFiles(Directory.GetCurrentDirectory(), "Discount.json", SearchOption.AllDirectories); if (files == null || files.Length == 0) throw new Exception("Rules not found."); var fileData = File.ReadAllText(files[0]); var workflow = JsonConvert.DeserializeObject>(fileData); var bre = new RulesEngine.RulesEngine(workflow.ToArray(), null); string discountOffered = "No discount offered."; List resultList = bre.ExecuteAllRulesAsync("Discount", inputs).Result; resultList.OnSuccess((eventName) => { discountOffered = $"Discount offered is {eventName} % over MRP."; }); resultList.OnFail(() => { discountOffered = "The user is not eligible for any discount."; }); Console.WriteLine(discountOffered); } } }