C#store app无法加载json数据

时间:2014-03-12 11:03:15

标签: c# json windows-store-apps

我是C#Store应用的初学者,我有一个JSON文件,我希望在我的屏幕上看到它。问题是我的方法根本不会检索任何数据。 第二个问题,为了在屏幕上显示数据,它是否必须是可观察的集合?

public class DataConnection
{
    public DataConnection()
    {

    }

    public async Task getDataFromJson()
    {
        Uri dataUri = new Uri("ms-appx:///DataModel/ProductData.json");

        StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
        string jsonText = await FileIO.ReadTextAsync(file);
        JsonObject jsonObject = JsonObject.Parse(jsonText);
        JsonArray jsonArray = jsonObject["Groups"].GetArray();

        foreach (JsonValue groupValue in jsonArray)
        {
            List<ProductGroup> groupList = new List<ProductGroup>();
            JsonObject groupObject = groupValue.GetObject();
            ProductGroup group = new ProductGroup(groupObject["UniqueId"].GetString(),
                                                        groupObject["Title"].GetString(),
                                                        groupObject["Subtitle"].GetString(),
                                                        groupObject["ImagePath"].GetString(),
                                                        groupObject["Description"].GetString());

            foreach (JsonValue itemValue in groupObject["Items"].GetArray())
            {
                JsonObject itemObject = itemValue.GetObject();
                group.Items.Add(new ProductItem(itemObject["UniqueId"].GetString(),
                                                   itemObject["Title"].GetString(),
                                                   itemObject["Artikelnummer"].GetString(),
                                                   itemObject["VerkoopprijsInBtw"].GetString(),
                                                   itemObject["VerkoopprijsExBtw"].GetString(),
                                                   itemObject["Inkoopprijs"].GetString(),
                                                   itemObject["ActualStock"].GetString(),
                                                   itemObject["Marge"].GetString(),
                                                   itemObject["Eenheid"].GetString(),
                                                   itemObject["ImagePath"].GetString(),
                                                   itemObject["Description"].GetString()));

            }
            groupList.Add(group);
        }
    }
}

问题似乎在于:             Uri dataUri = new Uri(&#34; ms-appx:///DataModel/ProductData.json");

        StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);

调试器只是结束方法并继续进行任何数据的检索。 json文件中的数据经过测试和更正,因此不是问题。 我从标准的Gridapp复制了这个方法,所以代码应该没问题,我知道问题(可能)发生在StorageFile中。我错过了什么吗?

任何提示都会很好!

提前致谢。

2 个答案:

答案 0 :(得分:0)

问题是由您的异步调用引起的。

尝试按以下方式调用 GetFileFromApplicationUriAsync 同步

StorageFile file = StorageFile.GetFileFromApplicationUriAsync(dataUri).Result;

请注意,我省略了await关键字并获取了Result属性。

答案 1 :(得分:0)

感谢您的回答,但问题是愚蠢的。对于有同样问题的人:

我设法修复它以将json文件也放在项目中的调试器中\ bin \ Debug \ AppX下(它没有自动去那里,你根本看不到任何东西,或者如果没有,则不会检索数据你想获得像我用存储文件那样的数据。)

感谢您的回复。