2014-03-12 103 views
0

我是C#商店應用程序的初學者,我有一個JSON文件,我希望看到我的屏幕的圖塊。問題是我的方法不會檢索任何數據。 第二個問題,爲了向我的屏幕上顯示數據,它是否必須是可觀察的集合?C#商店應用程序無法加載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); 
     } 
    } 
} 

的問題似乎是在該行: 烏里dataUri =新URI( 「MS-APPX:///DataModel/ProductData.json」);

 StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri); 

其中調試器只是結束方法,並且沒有任何數據被回收。 json文件中的數據經過測試並且正確,所以不是問題。 我從一個標準的GridApp複製了這個方法,所以代碼應該沒問題,我知道這個問題(可能)發生在StorageFile中。我錯過了什麼嗎?

任何提示會很好!

在此先感謝。

+0

首先,我會檢查你的路徑,並確保完整的路徑是正確的(你可能已經做了,但仍然值得注意)。其次,我會看到'file'是否被正確的文件填充。在它後面添加一個斷點,看看它是否被加載。你也可以調用'GetBasicPropertiesAsync'並檢查它的'Size'。第三,你的集合不需要*成爲'ObservableCollection',除非你在填充它或修改它被加載到UI之後。如果它是一個靜態列表,它不會(但是請確保在加載數據後設置源**)。 –

回答

0

感謝您的答案,但問題是愚蠢的。對於有同樣問題的人:

我設法解決它把json文件也放在你的項目下的調試器中\ bin \ Debug \ AppX(它沒有自動去那裏,你不會看到如果你想獲得像我用存儲文件那樣的數據,任何東西或者不會檢索數據)。

感謝您的回覆。

0

該問題是由您的異步調用引起的。

嘗試調用 GetFileFromApplicationUriAsync同步如下:

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

請注意,我省略了await關鍵字和獲取的Result財產。

+0

我得到了同樣的問題,並嘗試你的方法。有用! –

+0

但是,由於系統拋出一個'System.UriFormatException',該進程並不總是成功。如果我使用'StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri);',則會拋出'System.Collections.Generic.KeyNotFoundException'。 –

相關問題