2016-05-05 59 views
0

我試圖用JSON中的用戶列表獲取文件,將其解序列化爲用戶類型對象列表,將新用戶添加到該列表以及然後重新序列化該列表並將其寫入文件。C#UWP JSON.net遇到反序列化和重新序列化文件中的對象時出現問題

這是我使用的代碼。

public async void appendFile(User _user) 
    { 
     StorageFolder folder = ApplicationData.Current.LocalFolder; 
     StorageFile file = await folder.GetFileAsync("LocalUsers.txt"); 
     string Json = await FileIO.ReadTextAsync(file); 

     List<User> users = JsonConvert.DeserializeObject<List<User>>(Json); 
     users.Add(_user); 

     string s = convertJson(users); 
     await FileIO.WriteTextAsync(file, s); 

    } 

當代碼運行時,它拋出這個錯誤: 類型的異常「Newtonsoft.Json.JsonSerializationException」發生在Newtonsoft.Json.dll但在用戶代碼

其他信息沒有處理:因爲類型需要一個JSON數組(例如[1,1,2,3,4,5, 2,3])來正確地反序列化。

要修復此錯誤,請將JSON更改爲JSON數組(例如[1,2,3])或更改反序列化類型,以使其成爲正常的.NET類型(例如,不是像整數這樣的基本類型,不是像數組或List的集合類型),可以從JSON對象反序列化。 JsonObjectAttribute也可以添加到類型中,以強制它從JSON對象反序列化。

不知道我在做什麼錯在這裏,任何幫助將不勝感激我也將開放給任何更改比我的實施更有效率。

+1

這意味着你在嘗試反序列化JSON的是不是一個列表。你能確認它是用[]的包裝嗎? –

+0

這是文件的內容:它最初是用JSON.net序列化的{「ID」:「d5d8fa11-1a95-4a73-9666-66671bc03d51」,「Name」:「Brian」} – evilsushi

回答

0

您的json是User類型的單個實體,因此它不會反序列化到列表中。用[]將json包裝起來,它就可以工作。確保在將來你編寫json文件時,你只寫一個集合類型而不是個人用戶。

鑑於你作爲當前的JSON文件所提供的是什麼,下面應該做的:

[{"ID":"d5d8fa11-1a95-4a73-9666-66671bc03d51","Name":"Brian"}]

+0

我相信這就是了,謝謝 – evilsushi