public List GetPropertyValues()

in CosmosClone/CosmosCloneCommon/Utility/ObjectScrubber.cs [87:148]


        public List<JToken> GetPropertyValues(JToken token, List<string> propNames, ref List<JToken> jTokenList)
        {            
            if(jTokenList == null)
            {
                jTokenList = new List<JToken>();
            }
            if (token == null || token.Type == JTokenType.Null) return jTokenList;

            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)
                            {
                                jTokenList.Add(jArray[k][currentProperty]);
                            }
                            else
                            {
                                jTokenList.Add(null);//In future, to retain null feature modify this to conditional
                            }
                            continue;
                        }
                        else
                        {
                            GetPropertyValues(jArray[k], propNames.GetRange(1, propNames.Count - 1), ref jTokenList);
                            continue;
                        }
                    }
                }
                else
                {
                    var jObj = (JObject)token;
                    if (isLeaflevel == true)
                    {
                        if (jObj[currentProperty] != null)
                        {
                            jTokenList.Add(jObj[currentProperty]);
                        }
                        else
                        {
                            jTokenList.Add(null);//In future, to retain null feature modify this to conditional
                        }
                    }
                    else
                    {
                        GetPropertyValues((JToken)jObj[currentProperty], propNames.GetRange(1, propNames.Count - 1), ref jTokenList);
                    }
                }

            } 
            return jTokenList;
        }