2016-12-10 12 views
0

私はXamarinとRiot Games APIを使用して簡単なアプリケーションを作成しようとしています。私は召喚者情報へのアクセスに問題があります。それは私の脱直列化が私が考えるように行われる方法のために私のユーザー名でのみ動作します。Riot GamesのAPI応答を解析する方法

これは私のコードです:

public async void GetSummonerInformation() 
{ 
    using (var client = new HttpClient()) 
    { 
    var result = await client.GetStringAsync(url); 
    var res = JsonConvert.DeserializeObject<RootObject>(result); 
    sumName = res.psychoal3x.name; 
    } 

} 
public class Psychoal3x 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public int profileIconId { get; set; } 
    public int summonerLevel { get; set; } 
    public long revisionDate { get; set; } 
} 

public class RootObject 
{ 
    public Psychoal3x psychoal3x { get; set; } 
} 

問題は、私は何か他のものに自分のユーザー名を変更した場合、それはRootObjectクラスでpsychoal3xを検索しますので、それは動作しませんということです。誰でもこれを修正する方法を知っていますか?私は少しのコードを変更し、これはそれが

どのように見えるかあるので

EDIT

[OK]をこれでsumNameが変更されたアカウント名が変更されたコード

try 
     { 
      using (var httpClient = new HttpClient()) 
      { 
       HttpResponseMessage response = httpClient.GetAsync(url).Result; 
       response.EnsureSuccessStatusCode(); 
       string result = response.Content.ReadAsStringAsync().Result; 
       var data = JsonConvert.DeserializeObject<Dictionary<string, SummonerDto>>(result); 
       var name1 = data.First().Value.name; 
       var id = data.First().Value.id; 
       var profileIconId1 = data.First().Value.profileIconId; 
       var revisionDate1 = data.First().Value.revisionDate; 
       sumId = id; 
       sumProfileIconId = profileIconId1; 
       sumRevisionDate = revisionDate1; 
       System.Diagnostics.Debug.WriteLine("{0} this is the {1}", data.First().Value.name, data.First().Value.profileIconId); 
      } 
     }catch(Exception ex) 
     { System.Diagnostics.Debug.WriteLine(ex.Message); } 
    public class SummonerDto 
    { 
     public int id { get; set; } 
     public string name { get; set; } 
     public int profileIconId { get; set; } 
     public int summonerLevel { get; set; } 
     public long revisionDate { get; set; } 

    } 

APIが呼び出されます。

+0

v1.0のAPIが出てきたとき、私はこのためにカップルのクライアントを作りました。しかし、それは1年ほど前であり、更新が必要です。ここに彼らはあります! https://github.com/JonDouglas/LoLFit/https://github.com/JonDouglas/LoLRank –

答えて

0

あなたは近くですが、ユーザー名をモデルクラスにハードコードしないでください。

public class SummonerDto 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int ProfileIconId { get; set; } 
    public int SummonerLevel { get; set; } 
    public long RevisionDate { get; set; } 
} 

APIドキュメントによると、戻り値の型はDictionary<string, SummonerDto>です:あなたが呼び出しているAPIがthis oneであると仮定すると、私はこのような構造をお勧めします。あなたは簡単にこれをデシリアライズするためにJSON.NETを使用することができます。

var data = JsonConvert.DeserializeObject<Dictionary<string, SummonerDto>>(result); 

値としてキー"psychoal3x"SummonerDtoオブジェクトにキーと値のペアが存在することを意味します。あなたはFirst()を使用して最初の戻り値を取得できます。

var summoner = data.First().Value; 

そこから、あなたがそのようなNameなど、すべてのプロパティにアクセスすることができます。ここで

あなたはコメントで掲示JSONデータに基づいて作業フィドルです:https://dotnetfiddle.net/xEUXa6

+0

こんにちは、 私はこれは私が探しています解決策ではないと思います。 まず、intを文字列に変換できないというデータ[0] .Nameのエラーを示します.2番目の問題は、別のアカウント名で問題が解決されない(考えている)ことです。 APIを呼び出したときに返されるJSON: '{ "psychoal3x":{ "ID":36564871、 "名前": "psychoAl3x"、 "profileIconId":1394、 "summonerLevel":30、 "revisionDate":1481230226000 } } 問題は、私は別のユーザー名を検索したいが、それはpsychoal3xのみを検索できるということだ。 –

+0

私はそれを修正したと思う!下の私の答えを確認 –

+0

@AlexTselikas私は私の答えで問題を修正 - あなたのためにこの作品ですか? –

関連する問題