C#UWP JSON.net无法从文件反序列化和重新序列化对象

时间:2016-05-05 23:47:39

标签: c# json.net win-universal-app windows-10-universal

我正在尝试使用JSON中的用户列表获取文件,将其反序列化为用户类型对象列表,将新用户添加到该列表,然后重新序列化该列表并将其写入文件。

这是我使用的代码。

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.dll中出现“Newtonsoft.Json.JsonSerializationException”类型的异常,但未在用户代码中处理

附加信息:无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [Xymby.Models.User]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。

要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是可以从JSON对象反序列化的集合类型,如数组或List)。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。

不确定我在这里做错了什么,任何帮助都会受到赞赏,我也愿意接受比我的实施更有效的任何改变。

1 个答案:

答案 0 :(得分:0)

您的json是User类型的单个实体,因此它不会反序列化为列表。用[]包裹json,它会起作用。确保将来编写json文件时只编写集合类型而不是单个用户。

鉴于您作为当前json文件提供的内容,以下内容应该:

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