我可以在Xamarin、C#、iOS中保存一个对象数组(或json数组、字典数组)到文件中吗



我有一个"app"对象列表,我想保存到文件中,稍后再检索。我使用"file.AppendAllText(filename,son)"将每个对象保存到文件中,但当检索文件时,它会抛出以下异常:

保存到文件:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine (documents, "app.json");
for (int i = 0; i < 25; i++) {
    nuint index = (nuint)i;
    App app = appsArray.GetItem<App>(index);
    var json = JsonConvert.SerializeObject (app, Newtonsoft.Json.Formatting.Indented);
    File.AppendAllText(filename, json);
}   

从文件读取:

    var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
    var filename = Path.Combine (documents, "app.json");
    String text = File.ReadAllText (filename);
    Console.WriteLine ("text: {0}", text);
    App appJSON = (App)Newtonsoft.Json.JsonConvert.DeserializeObject (text);

在反序列化时检索文件时中断:"引发Newtonsoft.Json.JsonReaderException:"读取完JSON内容后遇到其他文本:{.Path",第14行,位置1

文本输出为:

2016-03-24 18:14:47.405 top25[30102:2442745]文本:{"标题":"篮球明星™","总结":"世界上最好的多人游戏巴斯基","AppIcon":{"ClassHandle":{},"SuperHandle","Handle","AppIconURLString":"http://is2.mzstatic.com/image/thumb/Purple49/v4/71/1e/ad/711ead80-6f18-3b46-2947-85c4d7b38292/mzl.qvwejzyt.png/53x53bb-85.png","等级":1,"超级句柄":{},"句柄":{},"ClassHandle":{}}{"标题":"Snapchat","摘要":"当你生活在瞬间:)Snapping快乐!\n\n***\n\n请注意:Snapchatter可以始终捕获或保存您的消息,例如通过截屏或者使用相机。注意你拍的东西!","AppIcon":{"ClassHandle":{},"SuperHandle","Handle","AppIconURLString":"http://is1.mzstatic.com/image/thumb/Purple49/v4/ea/1c/21/ea1c2133-acbd-c16f-a8d5-33e254fdab7b/mzl.xydsraya.png/53x53bb-85.png","等级":2,"超级句柄":{},"句柄":{},"ClassHandle":{}}

您正在序列化每个单独的对象并将其附加到一个文件中,这将创建无效的JSON。相反,您应该只序列化整个数组并写一次。

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine (documents, "app.json");
var json = JsonConvert.SerializeObject (appsArray, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(filename, json);

最新更新