Save/Get ObservableCollection to/from 漫游

Save/Get ObservableCollection to/from Roaming

我正在制作一个通用 windows 商店应用程序并且我有一个 ObservableCollection。

我想要的是 save 来自某处 ObservableCollection 的数据,以便数据可以在桌面和具有相同通用应用程序的 phone 之间同步,然后我需要能够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 项目和属性是不切实际的。

最简单的方法是写在app data roaming文件夹下的一个文件中;应用设置存储起来不是很方便 collections。您可以使用 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