从file.json加载对象列表

时间:2013-11-13 16:34:49

标签: c# wpf json xaml windows-phone-8

我有一个Add.xaml文件 在里面,我有我的食谱类,它将我的食谱对象存储在名为breakfastRecipe

的列表中

然后我将list beakfastRecipe存储在breakfast.json文件中。 (使用我在其他成员处找到的反序列化/序列化方法)

我有几个文本框,我写了名称+成分然后我使用一个激活json序列化程序的保存按钮。我使用测试方法来测试解串器,如果一切正常并且确实如此。 在add.xaml页面上,对象列表的保存和加载工作正常

我有另一个页面breakfastList.xaml,我想使用longlistselector用我的所有食谱填充我的页面。问题是我不知道如何访问在另一页上创建的breakfast.json文件。

我使用相同的get / deserializer来加载我的数据

public async void btnGet_Tap()
    {

        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        try
        {
            // Getting JSON from file if it exists, or file not found exception if it does not
            StorageFile textFile = await localFolder.GetFileAsync("breakfastList.json");

            using (IRandomAccessStream textStream = await textFile.OpenReadAsync())
            {
                // Read text stream 
                using (DataReader textReader = new DataReader(textStream))
                {
                    //get size
                    uint textLength = (uint)textStream.Size;
                    await textReader.LoadAsync(textLength);
                    // read it
                    string jsonContents = textReader.ReadString(textLength);
                    // deserialize back to our products!
                    //I only had to change this following line in this function
                    breakfastRecipe = JsonConvert.DeserializeObject<IList<Recipe>>(jsonContents) as List<Recipe>;
                    // and show it
                    //displayProduct();
                }
            }
        }
        catch (Exception ex)
        {
            tester.Text = "error";
        }
    }

当我在构造函数中写

breakfastRecipe = new List(); btnGet_Tap();

在我看来,我正在创建一个新列表,然后btnGet从我的add.xaml创建的.json文件中加载数据但是它没有工作......

我的问题是如何访问我的&#34;第二页&#34;它存储在由我的第一页

创建的.json文件中

1 个答案:

答案 0 :(得分:0)

尝试将btnGet_Tap代码移动到异步函数中,该函数返回任务,然后在btnGet_Tap()方法中等待。然后你可以打电话

Foo().Wait();

如果您希望在构造函数中调用时等待。

    public async void btnGet_Tap()
    {
        await Foo();
    }

    public async Task Foo()
    {
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        try
        {
            // Getting JSON from file if it exists, or file not found exception if it does not
            StorageFile textFile = await localFolder.GetFileAsync("breakfastList.json");

            using (IRandomAccessStream textStream = await textFile.OpenReadAsync())
            {
                // Read text stream 
                using (DataReader textReader = new DataReader(textStream))
                {
                    //get size
                    uint textLength = (uint)textStream.Size;
                    await textReader.LoadAsync(textLength);
                    // read it
                    string jsonContents = textReader.ReadString(textLength);
                    // deserialize back to our products!
                    //I only had to change this following line in this function
                    breakfastRecipe = JsonConvert.DeserializeObject<IList<Recipe>>(jsonContents) as List<Recipe>;
                    // and show it
                    //displayProduct();
                }
            }
        }
        catch (Exception ex)
        {
            tester.Text = "error";
        }
    }