2016-04-08 3 views
-2

ここで何が間違っていますか?私はncaaデータを消費しようとしていますが、私はオブジェクトにシリアル化できないように、データに\ tと\ nの束を得ています。ここに私の機能があります。データを取得するための資格情報がないので、文字通りこれを実行できます。彼らはあなたのファイルにあるため tと nの束を返すAPI

public string GetGameInfo(DateTime dt) 
{ 
    string content = string.Empty; 
    string url = "http://data.ncaa.com/jsonp/scoreboard/baseball/d1/2016/04/06/scoreboard.html"; 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    request.ContentType = "application/json"; 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    Stream resStream = response.GetResponseStream(); 

    using (StreamReader sr = new StreamReader(resStream)) 
    { 
     content = sr.ReadToEnd(); 
    } 


    return content; 
} 


/// <summary> 
/// Summary description for Ncaa 
/// </summary> 
namespace Ncaa 
{ 

    public class callbackWrapper 
    { 
     public List<scoreboard> scoreboard { get; set; } 
    } 
    public class scoreboard 
    { 
     public DateTime day { get; set; } 
     public List<games> games { get; set; } 
    } 

    public class games 
    { 
     public string id { get; set; } 
     public string conference { get; set; } 
     public string gameState { get; set; } 
     public string startDate { get; set; } 
     public string startDateDisplay { get; set; } 
     public string startTime { get; set; } 
     public string startTimeEpoch { get; set; } 
     public string currentPeriod { get; set; } 
     public string finalMessage { get; set; } 
     public string gameStatus { get; set; } 
     public string periodStatus { get; set; } 
     public string downToGo { get; set; } 
     public string timeclock { get; set; } 
     public string network_logo { get; set; } 
     public string location { get; set; } 
     public string contestName { get; set; } 
     public string url { get; set; } 
     public string highlightsUrl { get; set; } 
     public string liveAudioUrl { get; set; } 
     public string gameCenterUrl { get; set; } 
     //public ChampInfo champInfo { get; set; } 
     //public IList<object> videos { get; set; } 
     public home home { get; set; } 
     public away away { get; set; } 
    } 

    public class home 
    { 
     public string teamRank { get; set; } 
     public IList<int> RHEBreakdown { get; set; } 
     public string iconURL { get; set; } 
     public string name { get; set; } 
     public string nameRaw { get; set; } 
     public string nameSeo { get; set; } 
     public string shortname { get; set; } 
     public string color { get; set; } 
     //public Social social { get; set; } 
     public string description { get; set; } 
     public string currentScore { get; set; } 
     public IList<string> scoreBreakdown { get; set; } 
     public string winner { get; set; } 
    } 

    public class away 
    { 
     public string teamRank { get; set; } 
     public IList<int> RHEBreakdown { get; set; } 
     public string iconURL { get; set; } 
     public string name { get; set; } 
     public string nameRaw { get; set; } 
     public string nameSeo { get; set; } 
     public string shortname { get; set; } 
     public string color { get; set; } 
     //public Social social { get; set; } 
     public string description { get; set; } 
     public string currentScore { get; set; } 
     public IList<string> scoreBreakdown { get; set; } 
     public string winner { get; set; } 
    } 

} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    var json = GetGameInfo(DateTime.Now); 

    //this one doesn't work 
    //JsonConvert.DeserializeObject<Ncaa.callbackWrapper>(json); 

    //I tried removing the /ts and ns with no luck too 
    json = json.Replace("\t", string.Empty).Replace("\n", string.Empty); 

    JsonConvert.DeserializeObject<Ncaa.callbackWrapper>(json); 


} 
+1

"API"タグにカーソルを合わせ、説明を読んでください.... –

+1

JSONを囲むcallbackWrapperとは何ですか?あなたはすでにそれを扱っていますか? – ManoDestra

+0

'\ t'と' \ n 'には何も問題はありませんが、本当にそれを処理できない場合は、['String.Replace()'](https://msdn.microsoft.com/ja)を使用してください。テキストを解析しようとする前に、C#で-us/library/fk49wtc1(v = vs.110).aspx)を実行します。 – abelenky

答えて

1

まず、\t sおよび\n Sの束が応答でありますなぜ答えることはあります。それらはそれぞれタブ文字と改行文字です。

これを解析する方法はわかりませんが、ほとんどのパーサーはこれを処理できるはずです。自分で書いた場合は、そのコードを投稿してください。

データは常にフォーマットcallback(JSON)のものであろう返された場合は、関数呼び出しを削除し、単にNewtonsoftJSON

EDIT使用してJSONを解析できます。追加されたコードを確認した後、私はあなたが除去されていないことに気付くことができを関数呼び出し。それを削除してからもう一度お試しください(例:{文字の最初の発生まで、または他の方法で削除するなど)

+0

自分の投稿を更新して私のクラスとパースコードを持たせました。 –

1

jsonにこれを行うことは助けになりました。

json = json.Replace("callbackWrapper(", string.Empty).Replace(");", string.Empty); 

次に、コールバックラッパーオブジェクトではなくスコアボードオブジェクトとして解析するだけです。

+1

これは安全ではない可能性があることに注意してください。なぜなら、作動可能なコンテンツに ');または' callbackWrapper( '、これも置き換えられます。 – Transcendental

関連する問題