0

拋出我用下面的代碼從XML如何捕捉出現InvalidOperationException由Deserialize方法

var temp = default(T); 
var serializer = new XmlSerializer(typeof(T)); 

try 
{ 
    TextReader textReader = new StreamReader(fileName); 
    temp = (T)serializer.Deserialize(textReader); 
} 
catch (InvalidOperationException ioe) 
{ 
    throw;   
} 

我知道rethorow它是多餘的部分,但我想扔在controled方式讀取數據。我想用這個地方向用戶顯示一些XML文件已經被corupted(即標籤沒有關閉)。一切工作正常,直到我不離開課堂,我想從請求這些數據的課程中發現這個異常。看起來這個例外是missinig,並且被忽略了,應用程序突然跳入diffrent方法。爲什麼我無法捕捉到這個異常?我甚至創建了自己的例外,但結果是一樣的 - 它似乎只是不離開原來的類,並導致一些應用程序跳轉。

+0

線程?嘗試包裝異常以添加線程信息(ID)。 –

+0

從哪裏調用這個方法?它是什麼類型的應用程序(Web /桌面)? – greg84

回答

1

xml反序列化異常與其他異常一樣工作 - 沒有任何意外(除了比平常更重要的是檢查.InnerException(遞歸),因爲所有有趣的信息都嵌套了一些例外)。

這是不是簡單地說你在捕捉異常的錯類?例如,不能保證它是InvalidOperationException。只要調用方法的trycatch(Exception ex),它應該捕獲在反序列化過程中發生的任何異常。

0

你可以使用XSD來驗證,存在的唯一途徑的動力,我知道做這種驗證,這Link可以幫助

0

我找到了原因。引發該異常的方法由靜態類構造函數調用。這就是爲什麼沒有拋出異常。開始時調用靜態構造函數,它們不會拋出異常(是嗎?)。我通過從xonstructor中提取方法並通過調用manualy來更改原始代碼 - 現在我可以在上面的圖層中捕獲異常。