public JToken GetUpdatedJsonArrayValue()

in CosmosClone/CosmosCloneCommon/Utility/ObjectScrubber.cs [208:275]


        public JToken GetUpdatedJsonArrayValue(JToken token, List<string> propNames, string overwritevalue, RuleType? ruleType)
        {
            if (token == null || token.Type == JTokenType.Null) return null;

            JToken jTokenResult=token;//just to initialize
            bool isLeaflevel = false;

            if (propNames.Count > 1)
            {
                if (propNames.Count == 2) isLeaflevel = true;

                var currentProperty = propNames[1];

                if (token.Type == JTokenType.Array)
                {
                    var jArray = (JArray)token;
                    for (int k = 0; k < jArray.Count; k++)
                    {
                        if (isLeaflevel == true)
                        {
                            if (jArray[k][currentProperty] != null && jArray[k][currentProperty].Type != JTokenType.Null)
                            {
                                jArray[k][currentProperty] = ScrubTokenValue(ruleType, jArray[k][currentProperty], overwritevalue);
                            }
                            continue;
                        }
                        else
                        {
                            if (jArray[k] != null && jArray[k][currentProperty].Type != JTokenType.Null)
                            {
                                jArray[k] = GetUpdatedJsonArrayValue(jArray[k], propNames.GetRange(1, propNames.Count - 1), overwritevalue, ruleType);
                                continue;
                            }
                            //else return null;
                        }
                    }
                    var str2 = jArray.ToString();
                    jTokenResult = (JToken)jArray;
                }
                else
                {
                    var jObj = (JObject)token;
                    if (isLeaflevel == true)
                    {
                        if (jObj[currentProperty] != null && jObj[currentProperty].Type != JTokenType.Null)
                        {
                            jObj[currentProperty] = ScrubTokenValue(ruleType, jObj[currentProperty], overwritevalue);
                        }
                    }
                    else
                    {
                        if (jObj[currentProperty] != null && jObj[currentProperty].Type != JTokenType.Null)
                        {
                            jObj[currentProperty] = GetUpdatedJsonArrayValue((JToken)jObj[currentProperty], propNames.GetRange(1, propNames.Count - 1), overwritevalue, ruleType);
                        }
                        //else return null;
                    }
                    var str3 = jObj.ToString();
                    jTokenResult = (JToken)jObj;
                }
            }

            if(jTokenResult == null)
            {
                jTokenResult = token;
            }
            return jTokenResult;
        }