Получите только одну переменную из ответа json

#c#

Вопрос:

Я делаю запрос на публикацию и получаю ответ json с большим количеством транзакций, таких как:

 "Transactions": [
{
"ID": "1",
"Name" : "name",
"Code": "123aaa"
},
{
"ID": "2",
"Name" : "name1",
"Code": "12345bbb"
}
]
 

Есть ли какой-нибудь простой способ получить одну переменную (например, первое значение «Кода»)? Без классов сущностей и т. Д.?
Я пробовал это

 var content = new StringContent(request, Encoding.UTF8, "application/json");
            var response = await HttpClient.PostAsync(postURL, content);
            var text = await response.Content.ReadAsStringAsync();

var code = JObject.Parse(text).Children().First().Values<string>("Code").First();
 

Но это не сработало:

Система.Исключение InvalidOperationException : Не удается получить доступ к дочернему значению в файле Newtonsoft.Json.Linq.Значение J.

Ответ №1:

Предполагая, что предоставленный json на самом деле является объектом (т. Е. Рассматриваемая строка заключена в фигурные скобки), вы можете использовать путь json:

 var code = JObject.Parse(text).SelectToken("$.Transactions[0].Code").ToString(); // results in "123aaa"
 

Если вы заинтересованы в использовании LINQ в JSON, вы можете сделать что-то вроде этого:

 var code = JObject.Parse(text)
    .Descendants()
    .OfType<JProperty>()
    .Where(p => p.Name == "Code")
    .Select(p => p.Value.ToString())
    .FirstOrDefault();
 

Но проще всего, я думаю, было бы использовать индексаторы:

 var code = JObject.Parse(text)["Transactions"][0]["Code"].ToString();
 

Комментарии:

1. спасибо, ваше решение помогло мне!

2. @Natali была рада помочь!