2010-08-05 53 views
0

我正在開發我的第一個Windows Phone 7應用程序,並且遇到了麻煩。基本上它只是讀取事件的JSON字符串,並綁定到一個列表(使用列表中的應用程序起點)當我嘗試反序列化JSON時,Windows Phone 7應用程序退出

public void Load() 
{ 
    // form the URI 
    UriBuilder uri = new UriBuilder("http://mysite.com/events.json"); 

     WebClient proxy = new WebClient(); 
    proxy.OpenReadCompleted += new OpenReadCompletedEventHandler(OnReadCompleted); 
    proxy.OpenReadAsync(uri.Uri); 
} 

void OnReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    if (e.Error == null) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(EventList)); 
     var events = (EventList)serializer.ReadObject(e.Result); 
     foreach (var ev in events) 
     { 
      Items.Add(ev); 
     } 
    } 
} 

public ObservableCollection<EventDetails> Items { get; private set; } 

EventDetails是我的類包裝了JSON字符串。這個類必須是正確的,因爲它是從內部生成json的那個網站所使用的類的精確副本...

我從webclient調用正確得到json字符串(我讀取了memorystream和json的確在那裏),但只要我嘗試反序列化字符串,應用程序退出並且調試器停止。

我沒有得到任何錯誤信息,或者有什麼閃失任何跡象顯示,它只是停止。如果我在觀察窗口中輸入反序列化方法,也會發生這種情況......

我已經嘗試過使用JSON.net,實際上我想也許這是JSON.net的問題,所以我將它轉換爲使用本機.net框架中的反序列化器,但是錯誤也是一樣的。

爲什麼應用程序剛剛退出?它不應該給我一些錯誤信息?

我可能會做錯什麼?

非常感謝!

+0

嘗試更改您的調試設置以拋出所有異常 - 在發出Web請求時,我有一些異常被無聲地拋出。 – 2010-08-06 01:39:06

+0

你能告訴我我在哪裏做這個改變?謝謝! – SelAromDotNet 2010-08-06 15:32:41

+0

ctrl + alt + e然後選擇例外 – 2011-02-11 13:10:17

回答

1

首先,你有一些看起來像JSON的字符串的事實並不意味着你有一個有效的JSON。嘗試轉換一個簡單的。

如果你的JSON是有效的,它可能是你的JSON實現不知道如何將一個列表轉換爲EventList。試試ArrayList,讓我知道。

+0

感謝您的回覆!我相信JSON是有效的,因爲它與網站中使用的相同的json反序列化到相同的事件細節類中。 但我相信你是對的,它必須與映射有關,因爲如果我手動做到這點,創建一個EventList類並解析json中的每個值,它的工作原理並不會崩潰...... 但我不喜歡它只是關閉。這對任何人都沒有幫助!再次感謝 – SelAromDotNet 2010-08-05 18:07:06

0

我想遷移現有的一些WM代碼在運行WP7的時候就遇到了這個同樣的問題。我相信WP7應用程序在加載一個引用WP7中不可用的程序集(或類?)時會崩潰。在我的情況下,我認爲它是Assembly.Load或System.IO命名空間中的某些內容,與通過路徑訪問文件相關。

雖然你的情況可能是完全不同的東西,症狀都是一模一樣的。

我可以推薦的唯一方法是通過JSON庫並查看它是否引用WP7中不允許的基類。請注意,它甚至不必擊中導致此問題的代碼行 - 只要它嘗試擊中包含錯誤引用的類,它就會崩潰。

如果你能步入JSON庫,你可以得到一個更好的主意,其中的類是造成問題,因爲只要代碼引用它,整個應用程序會崩潰和調試器將停止。

1

應用程序因未處理的異常發生而關閉。如果檢查App.xaml.cs文件,您會發現關閉您的應用程序的代碼。你需要做的是嘗試捕獲你的反序列化過程並在本地處理它。所以最有可能你有一些JSON DataContractJsonSerializer不喜歡。我一直有問題反序列化WCF JSON和不得不去其他路線。

您可能要檢查,以確保您的JSON是有效的,只是因爲你的網站很喜歡,這並不意味着它實際上是有效的,您網站上的代碼可以幫助解決問題。在http://jsonlint.com/中放入您的JSON對象(字符串)的副本以查看它是否有效。 Crokford(創建JSON的人)寫了這個網站來驗證JSON,所以我會比你的網站更依賴它;)這個小網站在過去的一年裏幫助我解決了一些問題。

相關問題