在 .net Standard 应用程序上本地保存数据

Saving Data locally on a .net Standard app

我想将我的 .net Standard 应用程序上的数据序列化到本地文件中,并且我想尽可能避免使用 sqlite。

跨平台应用程序的标准建议似乎是 PCL 存储,但根据此 link,PCL 存储不再维护,不提供 .net 标准支持并且备选 PCLExt 不成熟。

你能告诉我是否可以简单地序列化我的数据,例如json?

非常感谢你!

您无法完全访问 OS 的文件系统和特定于平台的功能,例如 Android 的 ContentResolver,但对于 read/write 中的基本文件您应用程序的沙箱(或外部文件系统,如果您的应用程序可以访问它).NetStandard 2.0 工作正常,因此适用于存储和检索基于文本的文件 serializing/deserializing Json.

例如,如果您有一个基于 Xamarin.Forms 的解决方案并将 .NetStandard 2.0 库项目添加到该解决方案并向其添加 Newtonsoft.Json。您可以在其中创建这些函数:

.NetStandard 库函数:

public static class Common
{
    public static void WriteFile(string fileName, Tuple<string, string> obj)
    {
        var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        File.WriteAllText(Path.Combine(path, fileName), JsonConvert.SerializeObject(obj));
    }

    public static Tuple<string, string> ReadFile(string fileName)
    {
        var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        return JsonConvert.DeserializeObject<Tuple<string, string>>(File.ReadAllText(Path.Combine(path, fileName));
    }
}

现在在您的 Xamarin.Forms 项目(.NetStandard * Shared 项目)中,引用您创建的 project/library 您可以这样做:

ReadWriteCommand = new Command(() =>
{
    var someObj = Tuple.Create("Stack", "Overflow");

    Common.WriteFile("SushiHangover.txt", someObj);
    var readSomeObj = Common.ReadFile("SushiHangover.txt");
    if ((someObj.Item1 != readSomeObj.Item1) || (someObj.Item2 != readSomeObj.Item2))
        throw new Exception();
});