2017-10-19 25 views
-2

私はJSON文字列(Steam Public Data)をパースするために無数のメソッドを試しましたが、何も動作していないようです。私はちょうど文字列から値を抽出できるようにしたい。たとえば、personanameの値を取得すると、SlothGodが返されます。私は自分のプロジェクトにJSON.NETをインストールしています。ここでC#JSON文字列の解析

は私のJSONです:

{ 
    "response": { 
     "players": [ 
      { 
       "steamid": "76561198301407459", 
       "communityvisibilitystate": 3, 
       "profilestate": 1, 
       "personaname": "SlothGod", 
       "lastlogoff": 1508389707, 
       "commentpermission": 1, 
       "profileurl": "http://steamcommunity.com/id/sleuthgud/", 
       "avatar": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/09/09cea52b91136fb3306c57771a746db2823b91ba.jpg", 
       "avatarmedium": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/09/09cea52b91136fb3306c57771a746db2823b91ba_medium.jpg", 
       "avatarfull": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/09/09cea52b91136fb3306c57771a746db2823b91ba_full.jpg", 
       "personastate": 0, 
       "realname": "Josh", 
       "primaryclanid": "103582791460168790", 
       "timecreated": 1462086929, 
       "personastateflags": 0, 
       "loccountrycode": "AU", 
       "locstatecode": "QLD" 
      } 
     ] 

    } 
} 

主な方法は私に提案:

public class Details 
{ 
    public string personaname { get; set; } 
} 
private void GetSteamDetails() 
{ 
    var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Details>(SteamDetailsJson); 
    SteamName = data.personaname; 
} 

これはをPage_Load()の前に置かれています。次に、GetSteamDetails()を呼び出します。私は名前を取得したいとき。

+0

あなたは..あなたがしようとしているかを示す必要があり、我々はそれをの –

+3

が重複する可能性を修正しようとして助けることができる[Iは、C#でJSONをパースするにはどうすればよい?](https://stackoverflow.com/questions/6620165/どのように私はパース - json-with-c) –

+0

@ TAHASULTANTEMURI私はその正確な投稿を自分自身で見たが、まだそれを働かせることができなかった – SlothGod

答えて

0

私の質問は投票ダウンされた後、私はこの問題をあきらめていないことを決めました。広範な調査、試行錯誤、そして最も役立つIMOであるYouTubeチュートリアルの後に。データにJSON配列が含まれていることがわかりましたが、私はこれと混乱しましたが、答えは単にC#配列のように扱い、プレーヤーの最後に[1]を追加することでした。

Details details = new Details(); 
public class Details 
{ 
    public string avatar { get; set; } 
    public string avatarmedium { get; set; } 
    public string avatarfull { get; set; } 
    public string realname { get; set; } 
    public string personaname { get; set; } 
    public string steamid { get; set; } 
} 

private void GetSteamDetails() 
{ 
    var SteamDetails= JsonConvert.DeserializeObject<dynamic>(SteamDetailsJson); 
    avatar = SteamDetails.response.players[1].avatar.ToString(); 
    personaname = SteamDetails.response.players[1].personaname.ToString(); 
} 
0

このプロジェクトではすでにNewtonsoft.Jsonが参照されています。

jsonのデータ構造を表すためにクラスを使用すると、簡単に逆シリアル化できます。
クラス内で必要なプロパティのみを使用できます。更新については

public class Player 
{ 
    public string personaname { get; set; } 
} 

var player = Newtonsoft.Json.JsonConvert.DeserializeObject<Player>(jsonString); 

// use player.personaname 

あなたはJSON文字列から、自動的にクラスを生成するためにhttp://json2csharp.com/を使用することができ、あなたのデータ構造

public class Team 
{ 
    public List<Player> players { get; set; } 
} 

public class Response 
{ 
    public Team response { get; set; } 
} 
+0

私はDeserializeObjectメソッドについて非常に混乱していますが、 'Data'の代わりに何を追加するのか説明できますか? – SlothGod

+0

クラス 'データ'を作成するか、名前を付けます。 – Fabio

+0

私の質問を編集し、私が行った変更を加えました。 SteamNameはまだnullを返しています。 – SlothGod

0

を表すクラスを作成して質問します。

+0

この回答に投票しましたか?これは良いものです。 –

+0

私はdownvoterではありませんが、私は "リンク"の答えは非常に歓迎しないと思うので、 – Fabio

+0

@ファビオ私はそれが理由だと思う。そのページはダウンし、この答えは役に立たない。それは、既存の答えを除いて、より良いです。 – john

0

提供したJSON文字列に基づいて、サポートする次のC#クラスを用意するか、JSONオブジェクト値を逆シリアル化する必要があります。thisリンクを使用してクラスを生成しました。

public class Player 
{ 
    public string steamid { get; set; } 
    public int communityvisibilitystate { get; set; } 
    public int profilestate { get; set; } 
    public string personaname { get; set; } 
    public int lastlogoff { get; set; } 
    public int commentpermission { get; set; } 
    public string profileurl { get; set; } 
    public string avatar { get; set; } 
    public string avatarmedium { get; set; } 
    public string avatarfull { get; set; } 
    public int personastate { get; set; } 
    public string realname { get; set; } 
    public string primaryclanid { get; set; } 
    public int timecreated { get; set; } 
    public int personastateflags { get; set; } 
    public string loccountrycode { get; set; } 
    public string locstatecode { get; set; } 
} 

public class Response 
{ 
    public List<Player> players { get; set; } 
} 

public class RootObject 
{ 
    public Response response { get; set; } 
} 

その後、Newtonsoft.Jsonを使用して、あなたは次のようにあなたのC#クラスにJSONオブジェクトをデシリアライズすることができます

JsonConvert.DeserializeObject<RootObject>("yourJsonString");