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