这是一个名为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
}
}
}
}
我不确定这是最好的方法。
答案 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