Ответ SO, на который вы ссылались, не работает, потому что он дает вам все ключи вашего корневого объекта в виде списка строк.
То, что вы хотите, - это рекурсивный способ получить все «ключи»(JProperty.Name). Если у вас есть JProperty
с Name = "type"
, давайте назовем его JProperty typeProp;
. Тогда typeProp.Parent
даст вам JContainer
, содержащий ""type"" : ""PostgreSql""
, а typeProp.Parent.Parent
даст вам JProperty
с Name = "database"
.
Так что подобное может помочь (будьте осторожны, не проверено):
JToken current = typeProp;
string path = "";
while (current != null)
{
path = current.Name + "/" + path;
if(current.Parent != null) current = current.Parent.Parent;
}
Это даст вам дополнительную косую черту на конце, как это:
settings/general/database/type/
, которую вы можете удалить с помощью:
char[] charsToTrim = {'/'};
path.trimEnd(charsToTrim)