2016-03-28 33 views
0

depolar Ben kendi kendini öğreten bir C# programcıyım. C# hakkında bildiğim her şey okulda Java eğitimi almaktan ve C# 'ya uygulamaktan. Sınıflar konusundaki bilgim mükemmel değildir ve JSON verilerini kullanmak neredeyse tamamen bir şey değildir. Bu yüzden bir HttpWebClient'ten aşağıya çekip JSON.NET kullanarak serileştirdiğim bu JSON verisine sahibim. Sınıf yapısı için json2csharp sınıfı jeneratörü kullandım. Yine de, nesnenin sadece her şey için null olmasına neden olan bir adımı kaçırdığımı iddia ediyorum.C# Twitch Sınıfı her zaman boş

Örnek JSON Veri https://github.com/justintv/Twitch-API/blob/master/v3_resources/games.md GET/oyun/üst örnek, veri

Benim kod

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); 

^Bu objectHolder.top [0] .game.name sahip olmalıdır; Buna nasıl erişeceğimi bilmiyorum.

Twitch Dönüş Sınıf

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; } 
    } 

} 

Olduğum sınıf ve Konsol açıklamada geliyor ne yanlış yapıyorum, ben sadece bunu yapmak için yeterli bilmiyorum emin olun. Her ne kadar biliyorum ki, büyük ihtimalle çok basit bir şey.

+0

Hata ayıklamadınız mı? 'İçerik', 'DeserializeObject' yöntemine ilettiğinizde değeri var mı? – Leron

+0

Evet içeriği bir değere sahip, değer verilen örneğe benzer, ancak canlı bir örnek olduğu için içinde daha fazla öğe var. –

cevap

0

JSON nesnesine ait seri hale getirme, yalnızca .Net Entity, gelen JSON verileriyle açıkça eşleştiğinde mümkündür. Burada, Nested sınıfları oluşturmak yerine, TwitchReturn sınıfını oluşturmalı ve özelliklerin yanı sıra koleksiyonun olup olmadığına karar verecek verilere dayandırmalısınız.

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; } 
} 
+0

Bunu benim için açtığın için teşekkür ederim. Ayrıca, baskı için kod değiştirilmiş bir şey de yok, Console.WriteLine (objectHolder.top.ToList() [0] .game.name); –

+0

Bu doğru çalışıyor ve bunu benim için çok teşekkür ederim. Twitches API'nin tüm bu özelliklerini öğrenmenin en zor kısmı, hiç kimsenin C# 'yı örneklerini görmek için kullanması gibi görünmemesidir. –

İlgili konular