我想检查一下是否抽搐。电视流是否通过c#在线。目前我有:
private bool checkStream(String chan)
{
using (var w = new WebClient()) {
String json_data = w.DownloadString("https://api.twitch.tv/kraken/streams/" + chan);
JObject stream = JObject.Parse(json_data);
print(json_data); //just for testing purposes
if (stream["stream"] != null)
{
print("YIPPEE");
}
}
return false;
}
这是我正在下载的twitch JSON API: https://github.com/justintv/Twitch-API/blob/master/v2_resources/streams.md#get-streamschannel
可以看到,如果一个流当前处于脱机状态,那么stream
字段只表示null
。但很明显,它还在那里,所以我的if(stream["stream"]!=null)
检查不起作用。以前从未使用过JSON或Newtonsoft的JSON。net,所以我有点不知所措。提前感谢任何帮助!
您需要创建一个可以反序列化json的类。例如,如果你收到如下的json
MyJson = {
Prop1 : "Property1",
Prop2 : "Property2"
}
那么你需要创建一个类,作为你的程序和JSON流之间的契约。
public class MyJsonClass{
public string Prop1;
public string Prop2;
public MyJsonClass(){
}
}
现在,你可以将json反序列化到你的c#类中,并检查它是否有空值:
// Create a MyJson class instance by deserializing your json string
string myJsonString = ...//get your json string
MyJsonClass deserialized = JsonConvert.DeserializeObject<MyJsonClass>(myJsonString);
if ( deserialized.Prop1 == null )
//etc etc etc
这是Json响应的完整处理器(免责声明:我使用http://json2csharp.com/用于此代码):
public class Links
{
public string channel { get; set; }
public string self { get; set; }
}
public class Links2
{
public string self { get; set; }
}
public class Links3
{
public string stream_key { get; set; }
public string editors { get; set; }
public string subscriptions { get; set; }
public string commercial { get; set; }
public string videos { get; set; }
public string follows { get; set; }
public string self { get; set; }
public string chat { get; set; }
public string features { get; set; }
}
public class Channel
{
public string display_name { get; set; }
public Links3 _links { get; set; }
public List<object> teams { get; set; }
public string status { get; set; }
public string created_at { get; set; }
public string logo { get; set; }
public string updated_at { get; set; }
public object mature { get; set; }
public object video_banner { get; set; }
public int _id { get; set; }
public string background { get; set; }
public string banner { get; set; }
public string name { get; set; }
public string url { get; set; }
public string game { get; set; }
}
public class Stream
{
public Links2 _links { get; set; }
public string broadcaster { get; set; }
public string preview { get; set; }
public long _id { get; set; }
public int viewers { get; set; }
public Channel channel { get; set; }
public string name { get; set; }
public string game { get; set; }
}
public class RootObject
{
public Links _links { get; set; }
public Stream stream { get; set; }
}
,下面是如何使用它:
bool StreamOnline = false;
using (var w = new WebClient())
{
var jsonData = w.DownloadData("https://api.twitch.tv/kraken/streams/" + + chan);
var s = new DataContractJsonSerializer(typeof(RootObject));
using (var ms = new MemoryStream(jsonData))
{
var obj = (RootObject)s.ReadObject(ms);
StreamOnline = obj.stream == null;
}
}
return StreamOnline;
请注意,您需要引用System.Runtime.Serialization
并添加using System.Runtime.Serialization.Json;
以使用DataContractJsonSerializer
。如果你不需要每一个细节,只需使stream
属性类型为object
(在RootObject
类中),并检查它是否为null
。
你试过了吗?HasValues是一个bool属性,检查是否有子标记,如果它的值为空,则没有任何子标记。
if (stream["stream"].HasValues)
{
print("YIPPEE");
}else
{
print("No Stream");
}