private static void RemoveSystemProperties(JObject payload, bool isRoot = true)
{
foreach (var propertyName in ((IDictionary<string, JToken>)payload).Keys.ToArray()
.Where(k => k != "properties" && k != "annotations" && !(k == "id" && isRoot)))
{
payload.Remove(propertyName);
}
JToken annotationsJToken;
if (payload.TryGetValue("annotations", out annotationsJToken) && annotationsJToken.Type == JTokenType.Object)
{
var annotationsJObject = (JObject)annotationsJToken;
foreach (var jProperty in annotationsJObject.Properties())
{
if (jProperty.Value.Type == JTokenType.Object)
{
var nextPayload = (JObject)jProperty.Value;
RemoveSystemProperties(nextPayload, false);
annotationsJObject[jProperty.Name] = nextPayload;
}
else if (jProperty.Value.Type == JTokenType.Array)
{
foreach (var jItem in ((JArray)jProperty.Value).Where(i => i.Type == JTokenType.Object))
{
RemoveSystemProperties((JObject)jItem, false);
}
annotationsJObject[jProperty.Name] = jProperty.Value;
}
}
}
}