c# Deserialize frage


Andre267

Erfahrenes Mitglied
Schönen guten Tag,

ich habe gerade mal eine kurze Frage.
Wie komme ich mit c# und Newtonsoft an den Wert von Status?

Code:
https://api.twitch.tv/kraken/streams/gronkhtv
An die Werte unter stream wie _id, game oder viewers komme ich ohne Probleme dran, aber alles andere in channel ist ja unter geordnet.

Hier sieht man es etwas schöner:
http://www.jsoneditoronline.org/?id=e64df52c9ab95db6bef82fd39c02e5ea

Weiß jemand wie das geht oder wonach ich da suchen muss um da dran zu kommen?
 

Turri

Erfahrenes Mitglied
Hallo,

ich würde den JavaScriptSerializer dazu nehmen und dann durch die Dictionary Struktur hangeln.

Im Code hab ich der Einfachheit halber den Inhalt von dem Weblink in eine Datei gespeichert.
Code:
using System.Web.Script.Serialization;
....

using (StreamReader reader = new StreamReader(@"C:\Test.txt"))
{
  string jsonString = reader.ReadToEnd();
  var content = new JavaScriptSerializer().DeserializeObject(jsonString) as Dictionary<string, Object>;

  var stream = content["stream"] as Dictionary<string, Object>;
  var channel = stream["channel"] as Dictionary<string, Object>;

  var status = channel["status"];
  Console.WriteLine(status);
}
Edit: Im Project musst du noch System.Web.Extensions als Reference hinzufügen, sonst kennt er JavaScriptSerializer nicht.
 

Andre267

Erfahrenes Mitglied
Sieht überraschender weise ziemlich einfach aus.
Um das mit dem Newtonsoft Deserializer zu machen ist das Schlüsselwort also "Dictionary".
Die Lösung versuche ich jetzt entsprechend mal mit Newtonsoft um zu setzen.

Danke Turri :)
 

Turri

Erfahrenes Mitglied
Üblichweise ist JSON Notation in C# immer ein Dictionary<string, Object>.
Wobei Object dann wieder ein Dictionary<string, Object>usw.... ist.
Das hangelt sich so durch die ganze Struktur.

Du kannst dich ja melden ob dein Umbau geklappt hat.
Notfalls muss ich mir mal den Newsoft Deserializer mal besorgen. ;)
 

Andre267

Erfahrenes Mitglied
Notfalls muss ich mir mal den Newsoft Deserializer mal besorgen. ;)
Kann nicht schaden ;)

Ich bin gerade durch Zufall und hin und her probieren auf die Lösung gekommen:
Code:
    public class Worker
    {
        [JsonProperty("stream")]
        public Result Result { get; set; }

    }


    public class Result
    {

        [JsonProperty("game")]
        public string game { get; set; }

        [JsonProperty("viewers")]
        public string viewers { get; set; }

        [JsonProperty("channel")]
        public Output Output { get; set; }

    }

    public class Output
    {
        [JsonProperty("status")]
        public string status { get; set; }
    }
Der Code befindet sich in Worker.cs und wird wie folgt aufgerufen:
Code:
Worker w = JsonConvert.DeserializeObject<Worker>(json_code());
Es geht wahrscheinlich noch sehr viel leichter, aber so ist es noch übersichtlich und kann ganz einfach erweitert werden. :)