Windows phone 8 如何在我的Windows Phone 8应用程序的独立存储中更新JSON数据对象
我有包含费用清单的listpicker项目。Windows phone 8 如何在我的Windows Phone 8应用程序的独立存储中更新JSON数据对象,windows-phone-8,json.net,isolatedstorage,Windows Phone 8,Json.net,Isolatedstorage,我有包含费用清单的listpicker项目。 单击它,将打开一个新的XAML页面,并获得费用的详细信息。 有一个可编辑和保存的选项 所以,当用户单击“更新”按钮时,我应该如何更新存储在隔离存储中的特定JSON数据对象 我的代码在这里: 多谢各位 下面是updateExpenses.XAML.CS中的代码。请告诉我哪里出了问题 导航到此页面后 受保护的覆盖无效OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){ 步骤1:您
单击它,将打开一个新的XAML页面,并获得费用的详细信息。
有一个可编辑和保存的选项 所以,当用户单击“更新”按钮时,我应该如何更新存储在隔离存储中的特定JSON数据对象 我的代码在这里: 多谢各位 下面是updateExpenses.XAML.CS中的代码。请告诉我哪里出了问题 导航到此页面后 受保护的覆盖无效OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){
步骤1:您可以从
IsolatedStorage
读取JSON
数据对象,并使用datacontractjsonserializer
将其转换为DataContract
。然后您可以通过单击按钮更新特定值
步骤2:然后将此DataContract转换回stream或Json数据对象,并将其存储到IsolatedStorage
您可以参考第1步。也可以参考您是否看过这些示例:?Hi verdesrobert,谢谢您的回答。是的,我已经尝试过了。我有复杂的列表对象要更新。因此我无法使用它。您能否检查一下我的代码并检查我的错误所在。这段特定的代码在updateExpenses.xaml.cs文件中。请发布相关的代码片段,这些代码尽量少地再现您遇到的问题,而不是链接到临时文件位置。@WiredPairie:当然。我已经将代码放在下面了。您能缩小问题的范围吗?我不明白您的代码试图做什么,所以我无法告诉您可能出了什么问题。到底是什么没有按预期工作?您正在序列化
App.ViewModel.Given
例如。这不是您想要的吗?嗨,Vasuy,谢谢您的回答。我使用了JsonConvert.SerializeObject(App.ViewModel.Given)序列化对象。我获得了用户单击的特定数据对象的详细信息。我已设置了数据。但该对象未得到更新。您能否查看updateExpenses.xaml.cs页面中的代码,并告诉我哪里出错。由于代码不起作用,我已对其进行了注释。谢谢
base.OnNavigatedTo(e);
String dataFromAppSettings;
ExpencesGroup data;
NavigationContext.QueryString.TryGetValue("selectedExpenceObject", out selectedIndex);
NavigationContext.QueryString.TryGetValue("TypeofTransaction", out TransactionType);
if (TransactionType == ExpencesModel.ExpencesGivenKey)
{
if (IsolatedStorageSettings.ApplicationSettings.TryGetValue(ExpencesModel.ExpencesGivenKey, out dataFromAppSettings))
{
data = JsonConvert.DeserializeObject<ExpencesGroup>(dataFromAppSettings);
if (data != null) {
thisExpence = data.Expences[Convert.ToInt32(selectedIndex)];
this.DataContext = thisExpence;
SwitchBetweenListItems(thisExpence.TypeofTransaction);
SwitchBetweenListItems(thisExpence.PaidThrough);
}
}
}
else
{
if (IsolatedStorageSettings.ApplicationSettings.TryGetValue(ExpencesModel.ExpencesTakenKey, out dataFromAppSettings))
{
data = JsonConvert.DeserializeObject<ExpencesGroup>(dataFromAppSettings);
if (data != null) {
thisExpence = data.Expences[Convert.ToInt32(selectedIndex)];
this.DataContext = thisExpence;
SwitchBetweenListItems(thisExpence.TypeofTransaction);
SwitchBetweenListItems(thisExpence.PaidThrough);
}
}
}
private void update_Expense(object sender, System.Windows.Input.GestureEventArgs e)
{
thisExpence.Amount = amount.Text;
MessageBox.Show(thisExpence.Amount.ToString());
thisExpence.ExpenseTitle = ExpenseName.Text;
ListPickerItem PaidThroughListPicker = (ListPickerItem)paidThrough.SelectedItem;
thisExpence.PaidThrough = (String)PaidThroughListPicker.Content;
thisExpence.expenceStatus = (bool)PaymentStatus.IsChecked;
ListPickerItem listPickerItem = (ListPickerItem)TypeofTransaction.SelectedItem;
thisExpence.TypeofTransaction = (String)listPickerItem.Content;
if (thisExpence.TypeofTransaction == ExpencesModel.ExpencesGivenKey)
{
var data = JsonConvert.SerializeObject(App.ViewModel.Given);
IsolatedStorageSettings.ApplicationSettings[ExpencesModel.ExpencesGivenKey] = data;
}
else
{
var data = JsonConvert.SerializeObject(App.ViewModel.Taken);
IsolatedStorageSettings.ApplicationSettings[ExpencesModel.ExpencesTakenKey]. = data;
}
IsolatedStorageSettings.ApplicationSettings.Save();
NavigationService.Navigate(new Uri("/ExpencesPage.xaml", UriKind.RelativeOrAbsolute));
}