序列化 Json / Web 服务到 Observable 集合模型

Serialize Json / Web Services to Observable Collection Model

我想问一下,所以我使用了一个 Web 服务 api,然后将其序列化为一个可观察的模型集合。

我的问题是如何在任何地方使用这个可观察的集合,这样我就不必每次都从 Web 服务 call/get/consume?

所以只需调用一次api,然后每次都可以使用数据而无需再次调用API?

谢谢

为用户下次打开应用程序保存数据

将数据存储在本地Sqlite数据库中,或者将集合序列化到本地文件中以备后用。

使用同一部分的数据

将数据存储在一个公共对象中,并在每次需要初始化 ViewModel 时检索它

跨 Win 10 设备使用数据

  • 将文件/数据库存储在 OneDrive 中并在需要时同步
  • 如果数据量很小,而且您不需要 100% 同步数据,请将其存储在漫游文件夹中

正如@thang 上面提到的,有很多方法可以将数据存储在应用程序中,从而避免每次调用网络服务。

我会按照我的做法向您推荐:

1.When 我从 Web 检索 JSON 数据 Api 我正在将其解析为 Observable Collection:

    ObservableCollection<User> usersList = JsonConvert.DeserializeObject<ObservableCollection<User>>(responseJson).Users;

2.Once 我有我的列表 我还可以将序列化对象(以 JSON 格式)保存到文本文件(记住 JSON 与字符串完全不同):

private async void saveUsersToFile(string serializedUsersListAsJson)
{
  StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
  StorageFile usersFile = await storageFolder.CreateFileAsync("users.txt", CreationCollisionOption.OpenIfExists);
  await FileIO.WriteTextAsync(usersFile, serializedUsersListAsJson);
}

此步骤允许您存储数据,即使应用程序关闭并重新启动也是如此。

3.When 您启动应用程序,您可以调用以下方法从文件中读取数据:

private async void retrieveNotes()
{
  StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
  StorageFile usersFile = await storageFolder.CreateFileAsync("users.txt", CreationCollisionOption.OpenIfExists) 
  string serializedUsersList = await FileIO.ReadTextAsync(usersFile );

  // Deserialize JSON list to the ObservableCollection:
    if(serializedUsersList!=null)
     {
       var usersList= JsonConvert.DeserializeObject<ObservableCollection<User>>(serializedUsersList);
     } 

4.Last步骤是在需要使用的Pages中声明Observable Collection字段。例如,如果您需要在页面之间传递此列表,您可以使用:

Frame.Navigate(typeof(MainPage), usersList);

记得在应用启动后从文件中读取数据。之后你就可以在应用程序 运行 时使用它了。我的建议是每次连接 Web 时缓存数据 Api 以检索新数据。

希望这会有所帮助。如果您想阅读有关数据存储的更多信息,请在我的博客上阅读以下 post:

https://mobileprogrammerblog.wordpress.com/2016/05/23/universal-windows-10-apps-data-storage/