#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 была рада помочь!