Windows phone 8 如何在我的Windows Phone 8应用程序的独立存储中更新JSON数据对象

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:您

我有包含费用清单的listpicker项目。
单击它,将打开一个新的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));
    }