Json.NET obtém valor jToken aninhado
Estou trabalhando na análise de uma resposta http json com o Json.NET e tenho código de trabalho, mas tenho certeza de que estou fazendo isso de uma maneira excessivamente complicada. Minha pergunta é se existe uma maneira mais direta de obter um filho jToken pelo caminho e / ou desserializá-lo sem ultrapassar todos os níveis.
Eu tentei essa abordagem, mas ela retorna nula:
JObject jObj = JObject.Parse( text );
JToken myVal;
jObj.TryGetValue( "response.docs", out myVal );
Aqui está o meu código excessivamente complicado, incluindo desserialização:
JObject jObj = JObject.Parse( text );
foreach( var kv in jObj ) {
if( kv.Key == "response" ) {
foreach( JToken jt in kv.Value ) {
if( jt.Path == "response.docs" ) {
JEnumerable<JToken> children = jt.Children();
foreach( JToken t in children ) {
//THIS WORKS BUT IS NOT ELEGANT
Solr_User[] su = t.ToObject<Solr_User[]>();
}
}
}
}
}
E aqui está a resposta bruta do JSON apenas para referência:
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"indent":"on",
"wt":"json"}},
"response":{"numFound":4,"start":0,"docs":[
{
"id":3,
"first_name":"Bob",
"_version_":"1558902640594649088"},
{
"id":4,
"first_name":"Sam",
"_version_":"1558902640613523456"},
{
"id":2,
"first_name":"Fred",
"_version_":"1558902640613523457"},
{
"id":1,
"first_name":"Max",
"_version_":"1558902640613523458"}]
}}