Windows 8 应用本地存储

3

我正在尝试使用C#开发Windows 8应用程序,需要将两个列表(字符串和日期时间)存储在本地设置中。

List<string> names = new List<string>();
List<DateTime> dates = new List<DateTime>();

根据这个页面,我使用了LocalSettings:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh700361

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;

但是我在存储列表和从保存的设置中获取它们时遇到了问题。

您能否通过发送几行代码来帮助存储和检索字符串列表和日期时间列表类型对象(或者其他存储此类数据的方法)。

谢谢。

3个回答

3

这里有一个名为Windows 8隔离存储的库,它使用XML序列化。你可以存储object以及List<T>。它的使用也非常简单。只需在你的项目中添加DLL文件,你就可以使用存储数据的方法。

public class Account
{
   public string Name { get; set; }
   public string Surname{ get; set; }
   public int Age { get; set; }
}

保存在独立存储中:

Account obj = new Account{ Name = "Mario ", Surname = "Rossi", Age = 36 };
var storage = new Setting<Account>();          
storage.SaveAsync("data", obj); 

从隔离存储加载:

public async void LoadData()
{    
    var storage = new Setting<Account>();
    Account obj = await storage.LoadAsync("data");    
}

另外,如果您想存储列表: 可以将列表保存在独立存储中:

List<Account> accountList = new List<Account>();
accountList.Add(new Account(){ Name = "Mario", Surname = "Rossi", Age = 36 });
accountList.Add(new Account(){ Name = "Marco", Surname = "Casagrande", Age = 24});
accountList.Add(new Account(){ Name = "Andrea", Surname = "Bianchi", Age = 43 });

var storage = new Setting<List<Account>>(); 
storage.SaveAsync("data", accountList ); 

从隔离存储中加载列表:

public async void LoadData()
{    
    var storage = new Setting<List<Account>>();    
    List<Account> accountList = await storage.LoadAsync("data");    
}

1

0

尝试使用以下代码进行存储:

localSettings.Values["names"] = names 
localSettings.Values["dates"] = dates

并将其读取为:

dates = (List<DateTime>) localSettings.Values["dates"];

编辑:看起来我错了,你只能以这种方式存储基本类型。因此,您可能需要将所有内容序列化为byte[],通过使用MemoryStream并仅保存其缓冲区。


代码看起来没问题,但我试了一下。应用程序可以正确启动,但在运行时我收到了这个错误:“System.Exception”类型的异常发生在mscorlib.dll中,但未在用户代码中处理WinRT信息:尝试将要写入应用程序数据存储的值序列化时出错附加信息:不支持此类型的数据。如果有此异常的处理程序,则程序可能可以安全地继续运行。 - cewrld
1
我遇到了同样的问题。看起来问题出在尝试持久化 DateTime 上,因为在 c# 中它不是运行时类型(DateTimeOffset 是)。似乎解决方法是将 DateTime 转换为 DateTimeOffset 再转换回来……应该有更优雅的解决方案。在 WP8 IsolatedStorage 运作良好。 - Francisco Marquez
var applicationData = Windows.Storage.ApplicationData.Current; var localSettings = applicationData.LocalSettings;变量applicationData表示当前应用程序的数据,而localSettings则表示该数据的本地设置。 - Dinesh Rajan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接