C#Beginner - 使用不同类中的类

时间:2017-03-15 17:13:33

标签: c# json twitch discord

这是一个名为TwitchAPIexample的文件,位于项目MyFirstBot下的文件夹插件中。类和代码如下:

using System.Net;
using System.IO;
using Newtonsoft.Json;

namespace MyFirstBot.Plugins
{
    public class TwitchAPIexample
    {

        private const string url = "https://api.twitch.tv/kraken/streams/<channel>";

        public bool isTwitchLive;

        private static void BuildConnect()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = "Get";
            request.Timeout = 12000;
            request.ContentType = "application/json";
            request.Headers.Add("authorization", "<token>");

            using (System.IO.Stream s = request.GetResponse().GetResponseStream())
            {
                using (StreamReader sr = new System.IO.StreamReader(s))
                {
                    var jsonResponse = sr.ReadToEnd();
                    RootObject r = JsonConvert.DeserializeObject<RootObject>(jsonResponse);
                }
            }
        }


        public class Preview
        {
            public string small { get; set; }
            public string medium { get; set; }
            public string large { get; set; }
            public string template { get; set; }
        }

        public class Channel
        {
            public bool mature { get; set; }
            public string status { get; set; }
            public string broadcaster_language { get; set; }
            public string display_name { get; set; }
            public string game { get; set; }
            public string language { get; set; }
            public int _id { get; set; }
            public string name { get; set; }
            public string created_at { get; set; }
            public string updated_at { get; set; }
            public bool partner { get; set; }
            public string logo { get; set; }
            public string video_banner { get; set; }
            public string profile_banner { get; set; }
            public object profile_banner_background_color { get; set; }
            public string url { get; set; }
            public int views { get; set; }
            public int followers { get; set; }
        }

        public class Stream
        {
            public long _id { get; set; }
            public string game { get; set; }
            public int viewers { get; set; }
            public int video_height { get; set; }
            public int average_fps { get; set; }
            public int delay { get; set; }
            public string created_at { get; set; }
            public bool is_playlist { get; set; }
            public Preview preview { get; set; }
            public Channel channel { get; set; }
        }

        public class RootObject
        {
            public Stream stream { get; set; }
        }


    }

}

我需要做的是在MyFirstBot项目文件下的不同文件中使用名称空间MyfirstBot.Plugins中的类。我有:

using namespace MyFirstBot.Plugins

但我不确定如何使用RootObject。我尝试过使用:

TwitchAPIexample.stream TwitchLive = new TwitchAPIexample.stream()

但我真的不知道如何从那里检查JSON中的其他字符串,将它们设置为等于字符串,基本上只是如何操作TwitchAPIexample类中的所有内容。

我再次成为C#Noob,所以你不必为我写这篇文章,但是如果你能解释它或者用一个好的资源打我。我用谷歌搜索,仍然感到困惑。 OOP不是我的强项。

据我所知:

namespace MyFirstBot
{
    public class DiscordBot
    {
        DiscordClient client;
        CommandService commands;
        TwitchClient TwitchClient;
        TwitchAPIexample.Stream TwitchLive = new TwitchAPIexample.Stream();
        public DiscordBot()
        {
            if(TwitchLive.equals(null))
            {
                //stream is offline
            }
        }
    }
}

我不确定这是最好的方法。

1 个答案:

答案 0 :(得分:0)

对我来说,看起来你需要稍微改变你的架构。您不需要静态方法,并且需要创建属性槽,以便能够访问RootObject。而且你真的不需要嵌套这些课程。

public class TwitchAPIexample
{

    private const string url = "https://api.twitch.tv/kraken/streams/<channel>";

    public bool IsTwitchLive { get; set; }
    public RootObject Root { get; set; }

    public TwitchAPIexample()
    {
        BuildConnect();
    }

    private void BuildConnect()
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        request.Method = "Get";
        request.Timeout = 12000;
        request.ContentType = "application/json";
        request.Headers.Add("authorization", "<token>");

        using (System.IO.Stream s = request.GetResponse().GetResponseStream())
        {
            using (StreamReader sr = new System.IO.StreamReader(s))
            {
                var jsonResponse = sr.ReadToEnd();
                this.Root = JsonConvert.DeserializeObject<RootObject>(jsonResponse);
            }
        }
    }
}

public class Preview
{
    public string small { get; set; }
    public string medium { get; set; }
    public string large { get; set; }
    public string template { get; set; }
}

public class Channel
{
    public bool mature { get; set; }
    public string status { get; set; }
    public string broadcaster_language { get; set; }
    public string display_name { get; set; }
    public string game { get; set; }
    public string language { get; set; }
    public int _id { get; set; }
    public string name { get; set; }
    public string created_at { get; set; }
    public string updated_at { get; set; }
    public bool partner { get; set; }
    public string logo { get; set; }
    public string video_banner { get; set; }
    public string profile_banner { get; set; }
    public object profile_banner_background_color { get; set; }
    public string url { get; set; }
    public int views { get; set; }
    public int followers { get; set; }
}

public class Stream
{
    public long _id { get; set; }
    public string game { get; set; }
    public int viewers { get; set; }
    public int video_height { get; set; }
    public int average_fps { get; set; }
    public int delay { get; set; }
    public string created_at { get; set; }
    public bool is_playlist { get; set; }
    public Preview preview { get; set; }
    public Channel channel { get; set; }
}

public class RootObject
{
    public Stream stream { get; set; }
}

现在你可以做下一步

namespace MyFirstBot
{
    public class DiscordBot
    {
        DiscordClient client;
        CommandService commands;
        TwitchClient TwitchClient;
        TwitchAPIexample twitchLive = new TwitchAPIexample();
        public DiscordBot()
        {
            if(twitchLive.Root == null || twitchLive.Root.Stream == null)
            {
                //stream is offline
            }
        }
    }
}

所以你使用twitchLive.Root访问根对象,通过root可以访问你的流twitchLive.Root.Stream