向/从漫游保存/获取ObservableCollection

时间:2015-05-05 22:13:43

标签: c# json windows-store-apps observablecollection win-universal-app

我制作了一个通用的Windows商店应用,我有一个ObservableCollection。

我想要的是save来自ObservableCollection的数据,以便数据可以在具有相同通用应用程序的桌面和手机之间同步,然后我需要get这个数据,以便我可以更新ObservableCollection。

我之前没有做过这样的事情,所以我不确定如何继续...我是否需要将其保存到XML文件中,如果是这样,我将如何在不同的设备。我知道如何使用的唯一存储方法是:

     ApplicationData.Current.LocalSettings.Values["key"] = "something"; 
     //Which stores "something" in local storage with key "key".

     ApplicationData.Current.RoamingSettings.Values["key"] = "something";
     //Which stores "something" in user's  Microsoft account storage with key "key".

我认为最后一个看起来就像我真正想要的那样,但是保存我所有的ObservableCollection项目和属性是不切实际的。

1 个答案:

答案 0 :(得分:3)

最简单的方法是将其写入app数据漫游文件夹中的文件中;应用程序设置存储集合不是很方便。您可以使用XML,JSON或其他任何东西。这些天趋势是使用JSON,所以这是一个例子。

序列化:

var folder = ApplicationData.Current.RoamingFolder;
var file = await folder.CreateFileAsync("collection.json", CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenStreamForWriteAsync())
using (var writer = new StreamWriter(stream, Encoding.UTF8))
{
    string json = JsonConvert.SerializeObject(collection);
    await writer.WriteAsync(json);
}

反序列化:

var folder = ApplicationData.Current.RoamingFolder;
var file = await folder.GetFileAsync("collection.json");
using (var stream = await file.OpenStreamForReadAsync())
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
    string json = await reader.ReadToEndAsync();
    var collection = JsonConvert.DeserializeObject<ObservableCollection<YourClass>>(json);
}

(使用JSON.NET