如何在Windows应用商店应用中保存ObservableCollection?

时间:2012-12-17 22:52:51

标签: c# windows windows-8 windows-runtime

我正在基于Split App模板创建Windows应用商店应用。从SampleDataSource保存数据供以后使用的最佳方法是什么?

我试过了:

Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
roamingSettings.Values["Data"] = AllGroups;

它抛出异常:'不支持此类型的数据'。

1 个答案:

答案 0 :(得分:5)

RoamingSettings仅支持runtime data types(Uri除外);此外,对于每个设置和总共可以节省多少数据存在限制。

最好使用RoamingFolder(或许LocalFolder)来存储方面。

对于序列化方面,您可以尝试DataContractSerializer。如果你有一个类:

public class MyData
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
}
public ObservableCollection<MyData> coll;

然后写如下

var f = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("data.txt");
using ( var st = await f.OpenStreamForWriteAsync())
{
    var s = new DataContractSerializer(typeof(ObservableCollection<MyData>), 
                                       new Type[] { typeof(MyData) });
    s.WriteObject(st, coll);

并且像这样阅读

using (var st = await Windows.Storage.ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("data.txt"))
{
    var t = new DataContractSerializer(typeof(ObservableCollection<MyData>), 
                                       new Type[] { typeof(MyData) });
    var col2 = t.ReadObject(st) as ObservableCollection<MyData>;

}
相关问题