在 .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();
});
我想将我的 .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();
});