[英]How to save a Dictionary variable in roaming - C#
在学习了Visual C#的手册之后,我开始为Windows 8编写一个简单的应用程序。我正在使用Visual Studio 2013 Express和.NET Framework 4.5.1。 在我到目前为止编写的代码中,在页面的代码背后,创建人员列表:
private Dictionary<string, People> listPeople = new Dictionary<string, People>();
此后,我希望该列表将填充另一个页面的ComboBox
控件。 我认为的解决方案是在漫游时保存Dictionary<string, People>
变量,然后在需要的地方使用它。 这样,即使应用程序终止,也可以解决维护已保存人员列表的问题。
我能怎么做?
你已经尝试过了吗?
var applicationData = Windows.Storage.ApplicationData.Current;
applicationData.RoamingSettings.Values["PeopleList"] = listPeople;
var applicationData = Windows.Storage.ApplicationData.Current;
var listPeople = (Dictionary<string, People>)applicationData.RoamingSettings.Values["PeopleList"];
压倒性的建议是将设置序列化为字符串, 然后在“值”中设置Values
(或将值分别保存为复杂类型)。
但是,我认为这实际上忽略了值是一系列键值对的事实……如果您想支持复杂的类型,我认为在漫游文件夹中创建自己的文件是一个更好的主意。 我编写了一个小的帮助程序类,以通过JSON序列化完成此任务:
public class ApplicationStorageHelper
{
private static readonly JsonSerializer jsonSerializer = JsonSerializer.Create();
public static async Task<bool> SaveData<T>(T data)
{
var file =
await ApplicationData.Current.RoamingFolder.CreateFileAsync("settings.dat", CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
using (var outputStream = stream.GetOutputStreamAt(0))
{
using (var writer = new StreamWriter(outputStream.AsStreamForWrite()))
{
var jsonWriter = new JsonTextWriter(writer);
jsonSerializer.Serialize(jsonWriter, data);
return true;
}
}
}
}
public static async Task<T> LoadData<T>()
{
try
{
var file =
await ApplicationData.Current.RoamingFolder.GetFileAsync("settings.dat");
using (var inputStream = await file.OpenSequentialReadAsync())
{
using (var reader = new StreamReader(inputStream.AsStreamForRead()))
{
var jsonReader = new JsonTextReader(reader);
return jsonSerializer.Deserialize<T>(jsonReader);
}
}
}
catch (FileNotFoundException)
{
return default(T);
}
}
}
您必须从Nuget或其他方式引用JSON.Net。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.