using System.Collections.Generic;
using Newtonsoft.Json.Linq;
private static readonly string[] _requiredProperties = { "a", "b" };
public static void Main()
Console.WriteLine("Test single");
var j = JObject.Parse("{\"a\":\"1\",\"b\":\"2\",\"c\":{\"d\":\"4\"}}");
foreach (var p in Test(j))
Console.WriteLine("Test multiple");
j = JObject.Parse("{\"a\":\"1\",\"b\":\"2\",\"c\":[{\"d\":\"4\"},{\"e\":\"5\"}]}");
foreach (var p in Test(j))
Console.WriteLine("Test invalid");
j = JObject.Parse("{\"a\":\"1\",\"b\":\"2\",\"c\":[{\"d\":\"4\"},{\"e\":\"5\"}],\"f\":{\"g\":\"7\"}}");
foreach (var p in Test(j))
public static IEnumerable<JObject> CreatePackets(JObject json) {
single = json.Properties().Where(a=>!_requiredProperties.Contains(a.Name)).Single();
} catch (InvalidOperationException i) {
throw new Exception(i.Message.Contains("no ele") ? "No workflow rule data found!" : "Multiple workflow rule data found");
JObject _l_Enrich(JObject o) {
foreach (var prop in _requiredProperties)
if (single.Value is JObject)
yield return _l_Enrich((JObject)single.Value);
foreach (JObject p in single.Value)
yield return _l_Enrich(p);