ApplicationData,windows 8应用程序中的应用设置
本文关键字:应用 设置 应用程序 windows ApplicationData | 更新日期: 2023-09-27 17:50:55
在Windows窗体和WPF桌面应用程序中,您可以使用Properties.Settings.Default.MyAwesomeDictionarySetting = thisDictionaryObject;
将Dictionary
类型的设置保存到应用程序设置中。但是这些设置在Windows 8 metro应用程序中似乎根本不存在。
当前,当我保存字符串到设置时,我这样做:
localSettings.Values["someSetting"] = "dude";
但是,这还不够好。我还需要保存对象。我需要保存一个Dictionary
到一些设置的地方。
注意,这不是设置的魅力,这更像是应用程序的内部设置。
如何保存Dictionary<Object, String>
到设置?
你是对的,LocalSettings/RoamingSettings只支持这些数据类型。我怀疑其中一个原因是WPF/etc中使用的非平凡类型的序列化非常冗长(如果我错了,请纠正我)。这对存储和读取持久化存储的隐式速度产生了负面影响。事实上,需要注意的一件事是,从LocalSettings和RoamingSettings读取/写入不是 async
调用,这意味着这些操作意味着超级超级快。
System.Convert.ToBase64String(byte[])
和System.Convert.FromBase64String(string)
,这一点特别方便。例如,您可以有这样的内容:
private string ConvertToBase64String<T>(T obj) where T : class, IBinarySerializable
{
if (obj == null)
return string.Empty;
using (var stream = new System.IO.MemoryStream())
using (var writer = new System.IO.BinaryWriter(stream))
{
obj.Write(writer);
var bytes = stream.ToArray();
return System.Convert.ToBase64String(bytes);
}
}
:
private T ConvertFromBase64String<T>(string string64) where T : IBinarySerializable, new()
{
if (string.IsNullOrEmpty(string64))
return default(T);
var bytes = System.Convert.FromBase64String(string64);
using (var stream = new System.IO.MemoryStream(bytes))
using (var reader = new System.IO.BinaryReader(stream))
{
var obj = new T();
obj.Read(reader);
return obj;
}
}
使用二进制序列化的优点是速度快,明显快于基于反射的序列化(在我的经验中,大约快一个数量级)。