我有一个“应用程序”对象列表,我想保存到文件中并在以后检索。我必须使用“ 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]文本:{“ Title”:
  “ Basketball Stars™”,“ Summary”:“世界上最好的多人Basky”,
  “ 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,1,“超级句柄”:{},“句柄”:{},“类句柄”:{}} {
  “ Title”:“ Snapchat”,“ Summary”:“生活在
  时刻:)快乐捕捉!\ n \ n * * * \ n \ n请注意:Snapchatters可以
  始终捕获或保存您的消息,例如通过截屏
  或使用相机。请注意捕捉的内容!”,“ 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,“超级句柄”:{},“句柄”:{},“类句柄”:{}}

最佳答案

您正在序列化每个对象并将其附加到文件中,这将创建无效的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);

10-07 16:40
查看更多