2016-05-05 25 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