internal ReplaceResult ReplaceParameters(JObject source, JObject parameterObject)
        {
            ReplaceResult result = new ReplaceResult();

            foreach (var property in source.Properties())
            {
                if (property.Value is JObject)
                {
                    var replaceReturn = ReplaceParameters((JObject)property.Value, parameterObject);
                    result.Merge(replaceReturn);
                }
                else if (property.Value is JArray)
                {
                    ReplaceParametersInArray(parameterObject, result, property.Value as JArray);
                }
                else if (property.Value is JToken)
                {
                    source[property.Name] = ManageParametersInJToken(parameterObject, result, property.Value);
                }
            }
            return(result);
        }
        private void ReplaceParametersInArray(
            JObject parameterObject,
            ReplaceResult result,
            JArray array)
        {
            for (int i = 0; i < array.Count; i++)
            {
                var element = array[i];

                if (element is JObject)
                {
                    var replaceReturn = ReplaceParameters((JObject)element, parameterObject);
                    result.Merge(replaceReturn);
                }
                else if (element is JArray)
                {
                    ReplaceParametersInArray(parameterObject, result, element as JArray);
                }
                else if (element is JToken)
                {
                    array[i] = ManageParametersInJToken(parameterObject, result, element);
                }
            }
        }