2016-04-27 75 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" ] 
} 
] 
} 

這裏是我想要使用目前 Player類

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○碼bject不爲null,但列表爲空。如果任何人都可以告訴我如何將JSON轉換爲PlayerList對象,然後從那裏獲取玩家的變量,如UserName,我將非常感激!

+0

那麼,你的代碼有什麼問題? –

+0

我會建議嘗試這個網站最初生成您的[Json2Csharp](http://json2csharp.com/) – MethodMan

+0

我不退出瞭解如何訪問PlayerList pList中的播放器。 –

回答

1

原因是在json文檔中該屬性被稱爲「用戶」,並且在您的代碼中稱爲「pList」。

有兩個解決辦法:

  1. 重命名PlayerList.pList到PlayerList.Users

  2. 添加JsonProperty屬性在屬性設置它的名字是這樣的:

    類PlayerList
    {
    [JsonProperty(PropertyName =「Users」)]
    public List pList {get;組; }
    }

+0

Hooray!當我使用playerList.Users.Count()進行測試時,它顯示爲8!非常感謝! –

3

Visual Studio中爲解析XML/JSON ...也就是說,如果你複製一個XML或JSON一到剪貼板,然後你可以使用Edit -> Paste Special -> Paste JSON As Classes命令,並有VS自動生成有效的一個很好的功能模型類。

在你的JSON的情況下,這是我的VS生成的輸出:

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

嘗試。

此外,您正在使用JsonConvert,這似乎是由Newtonsoft。我不知道這是不是一個好的圖書館,but there ARE .NET classes which are capable of deserializing JSON。鏈接的問題提供了一種方法。另一種方法是使用DataContractJsonSerializer,儘管我認爲模型類需要添加[DataContract][DataMember]屬性才能使用它。

+0

Newtonsoft非常好,微軟開始將它包含在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給玩家列表類的用戶。