public JToken GetDocumentShuffledToken()

in CosmosClone/CosmosCloneCommon/Utility/ObjectScrubber.cs [149:206]


        public JToken GetDocumentShuffledToken(JToken token, List<string> propNames, ref Queue<JToken> tokenQ)
        {
            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] = tokenQ.Dequeue();
                            }
                            continue;
                        }
                        else
                        {
                            jArray[k] = GetDocumentShuffledToken(jArray[k], propNames.GetRange(1, propNames.Count - 1), ref tokenQ);
                            continue;
                        }
                    }
                    var str2 = jArray.ToString();
                    jTokenResult = (JToken)jArray;
                }
                else
                {
                    var jObj = (JObject)token;
                    if (isLeaflevel == true)
                    {
                        if (jObj[currentProperty] != null)
                        {
                            jObj[currentProperty] = tokenQ.Dequeue();
                        }
                    }
                    else
                    {
                        jObj[currentProperty] = GetDocumentShuffledToken((JToken)jObj[currentProperty], propNames.GetRange(1, propNames.Count - 1), ref tokenQ);
                    }
                    var str3 = jObj.ToString();
                    jTokenResult = (JToken)jObj;
                }
            }               
            if (jTokenResult == null)
            {
                jTokenResult = token;
            }
            return jTokenResult;
        }