【问题标题】:JSON Serialize and Deserialize with List<string> not working使用 List<string> 的 JSON 序列化和反序列化不起作用
【发布时间】:2020-03-10 12:12:09
【问题描述】:

我的开发遇到以下问题:

我想在我的 iPhone 上序列化并保存一个字符串列表 (System.List)。该列表包含正在运行的应用程序发生的错误消息。 然后我想加载它并反序列化它以将列表保存在我的应用程序中。以下代码会发生这种情况(代码缩短,不必要的部分被切断):

List<string> MyList = {"Message One", "Message two"};

//Serialize 
string Temp = Newtonsoft.Json.Jsonconvert.SerializeObject(MyList);

//Save Data
using (Streamwriter sw = File.AppendText(Path))
{
     sw.WriteLine(Temp);
}

//Load Data
MyList = Newtonsoft.Json.Jsonconvert.Deserialize<List<string>>(File.ReadAllText(Path));

然后我得到了异常 "Error converting value "one" to type 'System.Collections.Generic.List`1[System.String]'."

iOS 系统上的输出是一个 .txt 文件:

["One","Two"]

有什么问题?

【问题讨论】:

  • 使用File.AppendText 几乎肯定会导致问题。您不能将一个 JSON 文档(或类似文档)附加到另一个文档。我怀疑问题在于您的文件以"one" 开头,而这不是列表的开头。
  • 检查File.ReadAllText(Path)是否获取到您发送的数据。
  • 如果你能展示可编译的代码就好了,而不是像上面这样的缩短代码。
  • It's working ... 因为其他人写了你的文件not contains valid JSON

标签: c# ios xamarin xamarin.ios jsonconvert


【解决方案1】:

问题出在:File.AppendText("C:\temp\t.txt")

它将在每次运行时添加新行。 1次运行后。您无法转换所有文件内容。

            List<string> MyList = new List<string>{ "One", "two" };

            //Serialize 
            string Temp = JsonConvert.SerializeObject(MyList);

//Do this.
            File.WriteAllText("C:\\temp\\t.txt",Temp);

            //Comment this.
            //using (StreamWriter sw = File.AppendText("C:\\temp\\t.txt"))
            //{
            //    sw.WriteLine(Temp);
            //}

            //Load Data
            MyList = JsonConvert.DeserializeObject<List<string>>(File.ReadAllText("C:\\temp\\t.txt"));

【讨论】:

  • 安装的是 Newtonsoft.Json (12.0.2)
  • @IngmarWeix 我认为您的异常原因 File.AppendText("C:\\temp\\t.txt")) 它总是将新行附加到文件中。 1. 测试后你不能再转换它了 :)
  • 问题解决了!我已经更新了 JSON 文件并纠正了反序列化的错误。我反序列化为 List> 而不是 List..
  • 是的,你可以。但是第一次你将只有列表而不是列表列表。附加原因。我发现了错误。那么我值得接受吗? :)
  • @IngmarWeix 你不接受我的回答吗?
猜你喜欢
  • 2013-01-30
  • 2016-08-18
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多