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;
}