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

Jac*_*zek 1 c# windows windows-8 windows-runtime

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

我试过了:

Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
roamingSettings.Values["Data"] = AllGroups;
Run Code Online (Sandbox Code Playgroud)

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

Jim*_*eil 5

RoamingSettings仅支持运行时数据类型(Uri除外); 此外,对于每个设置和总共可以节省多少数据存在限制.

你最好将RoamingFolder(或者也许是LocalFolder)用于存储方面.

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

public class MyData
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
}
public ObservableCollection<MyData> coll;
Run Code Online (Sandbox Code Playgroud)

然后写如下

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);
Run Code Online (Sandbox Code Playgroud)

并且像这样读

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>;

}
Run Code Online (Sandbox Code Playgroud)