Класс C# Twitch всегда хранит ноль
Я программист на C#. Все, что я знаю о C#, - это изучение языка в школе и применение его в C#. Мои знания классов не превосходны, и использование данных JSON почти полностью ничего. Итак, у меня есть данные JSON, которые я извлекаю из HttpWebClient, а затем десериализую их с помощью JSON.NET. Я использовал генератор классов json2csharp для структуры классов. Как бы то ни было, я полагаю, что пропустил один шаг, из-за которого у объекта только нулевое значение для всего.
Пример данных JSON https://github.com/justintv/Twitch-API/blob/master/v3_resources/games.md GET / games / top пример данных
Мой код
var client = new HttpClient();
var url = new Uri("https://api.twitch.tv/kraken/games/top");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/vnd.twitchtv.v3+json"));
var response = await client.GetAsync(url);
var content = await response.Content.ReadAsStringAsync();
TwitchReturn objectHolder = JsonConvert.DeserializeObject<TwitchReturn>(content);
Console.WriteLine(objectHolder);
^ Это должно иметь objectHolder.top[0].game.name; Я просто не знаю, как получить к этому доступ.
Twitch Return Class
class TwitchReturn
{
public class Links
{
public string self { get; set; }
public string next { get; set; }
}
public class Box
{
public string large { get; set; }
public string medium { get; set; }
public string small { get; set; }
public string template { get; set; }
}
public class Logo
{
public string large { get; set; }
public string medium { get; set; }
public string small { get; set; }
public string template { get; set; }
}
public class Links2
{
}
public class Game
{
public string name { get; set; }
public int _id { get; set; }
public int giantbomb_id { get; set; }
public Box box { get; set; }
public Logo logo { get; set; }
public Links2 _links { get; set; }
}
public class Top
{
public int viewers { get; set; }
public int channels { get; set; }
public Game game { get; set; }
}
public class RootObject
{
public int _total { get; set; }
public Links _links { get; set; }
public List<Top> top { get; set; }
}
}
Я уверен, что то, что я делаю неправильно, происходит от этого класса и оператора Console, я просто не знаю достаточно, чтобы сделать это. Хотя я знаю, что это, скорее всего, что-то очень простое.
1 ответ
Десериализация объектов JSON в.NET возможна только тогда, когда.Net Entity четко совпадает с входящими данными JSON. Здесь, вместо создания вложенных классов, вам нужно будет создать класс TwitchReturn и на основе данных определиться со свойствами, а также с тем, будет ли это коллекция или нет.
class TwitchReturn
{
public Links _links { get; set; }
public IEnumerable<Top> top { get; set; }
public RootObject rootObject { get; set; }
}
public class Links
{
public string self { get; set; }
public string next { get; set; }
}
public class Box
{
public string large { get; set; }
public string medium { get; set; }
public string small { get; set; }
public string template { get; set; }
}
public class Logo
{
public string large { get; set; }
public string medium { get; set; }
public string small { get; set; }
public string template { get; set; }
}
public class Links2
{
}
public class Game
{
public string name { get; set; }
public int _id { get; set; }
public int giantbomb_id { get; set; }
public Box box { get; set; }
public Logo logo { get; set; }
public Links2 _links { get; set; }
}
public class Top
{
public int viewers { get; set; }
public int channels { get; set; }
public Game game { get; set; }
}
public class RootObject
{
public int _total { get; set; }
public Links _links { get; set; }
public List<Top> top { get; set; }
}