#c# #json
Вопрос:
Вот как выглядит моя логика:
public void SetVideoInfo(string videoID)
{
var url = new RestClient("https://www.googleapis.com/youtube/v3/videos?
part=snippetamp;fields=items(snippet(title,description))amp;id=" videoID
"amp;key=somekey");
url.Timeout = -1;
var urlRequest = new RestRequest(Method.GET);
var urlResponse = url.Execute(urlRequest);
var response = JObject.Parse(urlResponse.Content);
var data = (JArray)response["items"];
for (int i = 0; i < data.Count; i )
{
var videoTitle = data[i]["title"];
var videoDescription = data[i]["description"];
this.VideoTitle = videoTitle.ToString().Trim();
this.VideoDescription = videoDescription.ToString().Trim();
}
}
Вот как выглядит ответ API:
{
"items": [
{
"snippet": {
"title": "some title",
"description": "some description"
}
}
]
}
Моя текущая логика доходит до «фрагмента», но я получаю нули для заголовка и описания. Я просто хочу знать, как я могу добраться до атрибутов заголовка и описания.
Комментарии:
1. В RestSharp есть методы для разбора результатов непосредственно в соответствующие классы C#, используйте их вместо того, чтобы возиться с
JObject
s иJArray
s.2. Кроме того, это не полный ответ JSON — вы пропустили окружающее
{.....}
?3. Я пропустил несколько фигурных скобок. Вот как на самом деле выглядит ответ. { «элементы»: [ { «фрагмент»: { «название»: «некоторое название», «описание»: «некоторое описание» } } ] }
Ответ №1:
В RestSharp есть методы для разбора результатов непосредственно в соответствующие классы C#, используйте их вместо того, чтобы возиться с JObject
s и JArray
s. С моей точки зрения, что-то вроде этого должно сработать.
Во-первых, создайте несколько классов для хранения ваших данных:
public class Root
{
public List<Item> Items { get; set; }
}
public class Item
{
public Snippet Snippet { get; set; }
}
public class Snippet
{
public string Title { get; set; }
public string Description { get; set; }
}
Теперь вызовите универсальный метод RestSharp:
var urlResponse = url.Execute<Root>(urlRequest);
Теперь вы можете получить доступ к свойствам безопасным для типа способом.
var title = urlResponse.Items[0].Snippet.Title
var description = urlResponse.Items[0].Snippet.Description
Комментарии:
1. Потрясающее спасибо! Я попробую, посмотрим, смогу ли я заставить его работать. Я получаю ошибку в элементах, где это элементы[0], но я думаю, что просто что-то упускаю.
2. @seacode вы получаете ошибку в элементах[0], возможно, в элементах нет значения индекса 0. Проверьте один раз
3. @Rajesh Ну, это не похоже на ошибку исключения из диапазона или что-то в этом роде. Его подчеркнутый красный говорит о том, что iRestResponse<Root> не содержит определения для элементов.
4. О, вам может понадобиться что-то вроде
urlResponse.Content.Items...
5. .Контент не работает, но . Данные делают это. Так что это шаг в правильном направлении. Однако они все равно возвращаются как нулевые, так что, может быть, моя индексация неверна?