2016-04-27 14 views
0

私はゲーム用のプレーヤーのJSONリストを持っています。私はJSONファイルを読んで、私に選手のリストを与えることができるプログラムが必要です。次に、私はこの選手のリストを使って、各選手の名前と彼らが誰に従うのかを知ることができます。ここでオブジェクトへのJSONファイルの読み込みC#

{ 
"Version": "1", 
"Users": [ 
{ 
    "UserName": "CoolDude", 
    "Following": [ "SniperElitez", "IamAwesome" ] 
}, 
{ 
    "UserName": "GamerChick", 
    "Following": [ "IamAwesome", "NoWayBro", "WowWhoMe", "SniperElitez", "SurfingIsFun", "NowUTry" ] 
}, 
{ 
    "UserName": "SurfingIsFun", 
    "Following": [ "WowWhoMe" ] 
}, 
{ 
    "UserName": "IamAwesome", 
    "Following": [ "GamerChick", "NoWayBro" ] 
}, 
{ 
    "UserName": "NowUTry", 
    "Following": [ "GamerChick", "SniperElitez" ] 
}, 
{ 
    "UserName": "SniperElitez", 
    "Following": [ "SurfingIsFun", "IamAwesome" ] 
}, 
{ 
    "UserName": "WowWhoMe", 
    "Following": [ "NoWayBro", "GamerChick", "SniperElitez" ] 
}, 
{ 
    "UserName": "NoWayBro", 
    "Following": [ "GamerChick", "IamAwesome", "SniperElitez" ] 
} 
] 
} 

は、私は現在、 プレーヤークラス

class Player 
{ 
public string UserName { get; set;} 
public List<string> Following { get; set;} 
} 

PlayerListクラス

class PlayerList 
{ 
    public List<Player> pList { get; set; } 

} 

メイン

{ 

string json = File.ReadAllText("friends.json"); 
// this gives me a playerList object 
PlayerList playerList = JsonConvert.DeserializeObject<PlayerList>(json); 

    } 

たぶんPlayerList Oを使用しようとしているコードです。 bjectはnullではありませんが、Listは空です。誰かがJSONをPlayerListオブジェクトに変換してそこから取得する方法を教えてもらえれば、UserNameのようなプレイヤーの変数を得ることができます。

+0

あなたのコードの問題は何ですか? –

+0

私はこのサイトを最初にあなたの[Json2Csharp](http://json2csharp.com/)を生成することをお勧めします – MethodMan

+0

PlayerList pListのプレーヤーにアクセスする方法を分かりません。 –

答えて

1

なぜなら、jsonのドキュメントでは属性は「Users」と呼ばれ、コードでは「pList」と呼ばれています。

クラス:

  1. 名前の変更PlayerList.pList PlayerList.Usersへ

  2. は次のようにその名前を設定するには、プロパティにJsonProperty属性を追加します。

    これには2つのソリューションがあります。 PlayerList
    {
    [JsonProperty(PropertyName = "Users")]
    公開リストpList {get;セット; }
    }

+0

Hooray!私がplayerList.Users.Count()を使用してテストしたとき、それは8として表示されました!本当にありがとう! –

3

Visual StudioのあなたのクリップボードにXMLやJSONをコピーした場合、すなわち、あなたがEdit -> Paste Special -> Paste JSON As Classesコマンドを使用することができますし、VSが自動的に有効で生成している... XML/JSONを解析するための優れた機能を持っていますモデルクラス。

public class Rootobject 
{ 
    public string Version { get; set; } 
    public User[] Users { get; set; } 
} 

public class User 
{ 
    public string UserName { get; set; } 
    public string[] Following { get; set; } 
} 

はそれを試してみてください。

はあなたのJSONの場合には、これは私のVSが生成され出力されます。

また、あなたはJsonConvertを使用しています。これはNewtonsoftのようなものです。良いライブラリーかどうかはわかりませんが、but there ARE .NET classes which are capable of deserializing JSONです。リンクされた質問には1つの方法があります。もう1つはDataContractJsonSerializerですが、モデルクラスでは[DataContract][DataMember]属性を追加する必要があると思いますが、それを使用することもできます。

+0

Newtonsoftは非常に優れているので、MicrosoftはASP.Netに自身のライブラリよりも優先させることを始めました。 –

+0

@MartinBrownその場合、パニックにならず、持ち運んでください。 ;)私は個人的には、可能な限り第三者図書館の使用を避けようとしています。なぜなら、それらをプロジェクトに添付して、すべてのコンパイルが時には面倒なことがあるからです。それは、ナゲットが非常に助けてくれた... – Shaamaan

0

私は次のリンクで質問で述べたものを、次のことで、この作業を取得することができた。ここで

How to deserialize an JObject to .NET object

は私のコードは次のとおりです。

 var playerList = JsonConvert.DeserializeObject(json); 
     JObject jObject = ((JObject)playerList); 
     PlayerList users = jObject.ToObject<PlayerList>(); 

私はまた、PLISTに改名しましたPlayerListクラスのユーザーに送信します。

関連する問題