Xamarin将android数据保存到json文件

时间:2016-08-22 11:51:44

标签: c# android json xamarin save

我需要在调用方法OnDestroy时保存文件,并在调用方法OnCreate时加载相同的文件。这时我可以轻松地从Assets中读取json文件(这很好)

StreamReader reader = new StreamReader(Assets.Open("reiksmes.json"));
string JSONstring = reader.ReadToEnd();
Daiktai myList = JsonConvert.DeserializeObject<Daiktai>(JSONstring);
items.Add(myList);

,但是当我尝试将Daiktai类数据保存(写入)上面打开的同一个文件时,我遇到了一些问题。我试过了:

string data = JsonConvert.SerializeObject(items);
File.WriteAllText("Assets\\reiksmes.json", data);
  

通过此尝试我收到错误System.UnauthorizedAccessException: Access to the path "/Assets eiksmes.json" is denied.

也尝试过:

string data = JsonConvert.SerializeObject(items);
StreamWriter writer = new StreamWriter(Assets.Open("reiksmes.json"));
writer.WriteLine(data);
  

通过此尝试我收到错误System.ArgumentException: Stream was not writable.

要点: 我想我选择了错误的目录(Assets),我需要保存并加载数据(json格式)。那么我需要在哪里保存它们以及如何(举例)?

1 个答案:

答案 0 :(得分:1)

您无法将任何内容保存到资源。你可以从中读取。您必须将文件保存到其他文件夹。

        var fileName = "reiksmes.json";
        string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder
        var path = Path.Combine(documentsPath, fileName);

        Console.WriteLine(path);
        if (!File.Exists(path))
        {                
            var s = AssetManager.Open(fileName);
            // create a write stream
            FileStream writeStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
            // write to the stream
            ReadWriteStream(s, writeStream);
        }