序列化 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/
我想问一下,所以我使用了一个 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/