2013-05-07 60 views
3

在我C# + WPF + .NET 4.5代碼,假設我有以下方式定義的Player類:C#JSON文件到列表

public class Player { 
    public string FirstName; 
    public string LastName; 
    public List<int> Cells; 
    public string Level; 
} 

而且我有一個myobjects .json我在其中設法寫入(使用JSON.NET)這些對象的序列化集合(前兩個顯示在下面)的文件:

{ 
    "FirstName": "Foo", 
    "LastName": "Fighter", 
    "Cells": [ 
    1, 
    2, 
    3 
    ], 
    "Level": "46" 
}{ 
    "FirstName": "Bar", 
    "LastName": "Baz", 
    "Cells": [ 
    104, 
    127, 
    ], 
    "Level": "D2" 
} 

我想要做的就是讀取文件,和反序列化這些對象和填充PlayerList一個S:

using (Stream fs = openDialog.OpenFile()) 
using (StreamReader sr = new StreamReader(fs)) 
using (JsonTextReader jr = new JsonTextReader(sr)) { 
    while (jr.Read()) { 
    /* Find player in file */ 
    Player p = /* Deserialize */ 
    PlayerList.Add(p); 
    } 
} 

回答

12

無需通過項目閱讀項目。

string json = File.ReadAllText("myobjects.json"); 
var playerList = JsonConvert.DeserializeObject<List<Player>>(json); 

您可以使用此代碼來寫您的播放器列表文件

File.WriteAllText("myobjects.json", JsonConvert.SerializeObject(playerList)); 
+0

這看起來前途無量,但我收到以下錯誤: – mbaytas 2013-05-07 11:20:59

+0

無法反序列化當前的JSON對象(例如{「名」 :「value」})轉換爲類型'System.Collections.Generic.List'1 [MyApp.Player]',因爲該類型需要JSON數組(例如[1,2,3])才能正確地反序列化。 要修復此錯誤,請將JSON更改爲JSON數組(例如[1,2,3])或更改反序列化類型,以使其成爲正常的.NET類型(例如,不是像整數這樣的基本類型,也不是集合類型如數組或列表),可以從JSON對象反序列化。 JsonObjectAttribute也可以添加到類型中,以強制它從JSON對象反序列化。 – mbaytas 2013-05-07 11:22:22

+0

@baytas首先,使用序列化代碼'File.WriteAllText ...'並將結果與​​你的結果進行比較。很可能你沒有形成一個正確的json數組。 (例如,你的問題中的json錯過了對象之間的逗號。) – I4V 2013-05-07 11:27:34