Класс 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; }
}
Другие вопросы по тегам