在 C# 中存储设置的最佳方式是什么 PCL
What is the best way to store settings in C# PCL
我是跨平台 C# 应用程序的开发人员,目前面向 Windows Store 和 Xamarin 环境。我有一个所有应用程序都引用的共享便携式 class 库 (PCL),我在其中定义核心应用程序逻辑和算法,包括存储、网络、数据库和设置。
我需要的是一种更智能的设置存储方式。我不想使用任何键值方法或 XML 文件,因为这些方法完全过时了,那么这在 C# 中很容易实现:
[SettingsNode("app_settings")]
class AppSettings
{
public double SomeNumber;
public object SomeSerializable;
public byte[] SomeBytes;
[SettingsNode("custom_setting_name")]//just specifying XML/etc node name with SettingsNode attribute
public string SomeKey;
}
class x
{
void y()
{
AppSettings superSettingsSolution = Engine.LoadEntry<AppSettings>("test.xml");
superSettingsSolution.SomeBytes = new byte[10];
superSettingsSolution.SomeNumber = 4.6d;
superSettingsSolution.SomeSerializable = new object();//[Serializable] class
Engine.SaveEntry<AppSettings>("test.xml", superSettingsSolution);
}
}
我打算使用 PCLStorage 包进行跨平台存储,所以我不会在我的代码中引用 System.Windows.Storage,我也不想。
我的问题:C# 的 PCL 的代码示例 library/project/package 是否有任何接近的内容?很抱歉,如果我问的是一些琐碎的问题,但我还没有经验 'portable'/windows8 程序员。
using System.Xml.Serialization;
using PCLStorage;
using System.IO;
public virtual async Task<T> LoadSettings<T>(IFile file = null)
where T : IApplicationSettings
{
// File
if (file == null)
file = DefaultSettingsFile;
// Open file
using (Stream fileStream = await file.OpenAsync(FileAccess.Read))
{
var xmls = new XmlSerializer(typeof(T));
return (T)xmls.Deserialize(fileStream);
}
}
public virtual async Task SaveSettings(object settings, IFile file = null)
{
// File
if (file == null)
file = DefaultSettingsFile;
// Open file
using (Stream fileStream = await file.OpenAsync(FileAccess.ReadAndWrite))
{
var xmls = new XmlSerializer(settings.GetType());
xmls.Serialize(fileStream, settings);
}
}
我是跨平台 C# 应用程序的开发人员,目前面向 Windows Store 和 Xamarin 环境。我有一个所有应用程序都引用的共享便携式 class 库 (PCL),我在其中定义核心应用程序逻辑和算法,包括存储、网络、数据库和设置。
我需要的是一种更智能的设置存储方式。我不想使用任何键值方法或 XML 文件,因为这些方法完全过时了,那么这在 C# 中很容易实现:
[SettingsNode("app_settings")]
class AppSettings
{
public double SomeNumber;
public object SomeSerializable;
public byte[] SomeBytes;
[SettingsNode("custom_setting_name")]//just specifying XML/etc node name with SettingsNode attribute
public string SomeKey;
}
class x
{
void y()
{
AppSettings superSettingsSolution = Engine.LoadEntry<AppSettings>("test.xml");
superSettingsSolution.SomeBytes = new byte[10];
superSettingsSolution.SomeNumber = 4.6d;
superSettingsSolution.SomeSerializable = new object();//[Serializable] class
Engine.SaveEntry<AppSettings>("test.xml", superSettingsSolution);
}
}
我打算使用 PCLStorage 包进行跨平台存储,所以我不会在我的代码中引用 System.Windows.Storage,我也不想。
我的问题:C# 的 PCL 的代码示例 library/project/package 是否有任何接近的内容?很抱歉,如果我问的是一些琐碎的问题,但我还没有经验 'portable'/windows8 程序员。
using System.Xml.Serialization;
using PCLStorage;
using System.IO;
public virtual async Task<T> LoadSettings<T>(IFile file = null)
where T : IApplicationSettings
{
// File
if (file == null)
file = DefaultSettingsFile;
// Open file
using (Stream fileStream = await file.OpenAsync(FileAccess.Read))
{
var xmls = new XmlSerializer(typeof(T));
return (T)xmls.Deserialize(fileStream);
}
}
public virtual async Task SaveSettings(object settings, IFile file = null)
{
// File
if (file == null)
file = DefaultSettingsFile;
// Open file
using (Stream fileStream = await file.OpenAsync(FileAccess.ReadAndWrite))
{
var xmls = new XmlSerializer(settings.GetType());
xmls.Serialize(fileStream, settings);
}
}