在.net标准应用上本地保存数据

时间:2017-12-12 22:19:05

标签: json xamarin xml-serialization portable-class-library .net-standard

我想将我的.net标准应用上的数据序列化到本地文件中,如果可能的话我想避免使用sqlite。

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

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

非常坦克!

1 个答案:

答案 0 :(得分:2)

您无法完全访问操作系统的文件系统和平台特定功能(如Android ContentResolver),但可以在应用程序的沙箱(或外部文件系统,如果您的应用可以访问它)中进行基本文件读/写操作。 NetStandard 2.0工作正常,因此可用于存储和检索基于文本的文件,以便序列化/反序列化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 *共享项目)中,引用您创建的项目/库,您可以执行以下操作:

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();
});