2010-01-29 21 views
0

如何使用DataContractSerializer序列化Exception對象列表(還包括派生異常,例如FileNotFoundException)?DataContractSerializer和列表(例外)

我總是得到關於序列化程序不知道列表中的類型的錯誤,所以我設計了一個解決方法。

它看起來是這樣的:

Dim XmlSerializer As New DataContractSerializer(_ 
    ExceptionsList.GetType(), ExceptionsList.Select(Function(i) i.GetType)) 
XmlSerializer.WriteObject(Stream, List) 

這工作。我只是將所有不同的異常類型添加到已知類型的列表中,並且它可以工作。但是在反序列化中,我被卡住了。問題是我不知道事先存儲在文件中的例外類型。

回答

0

我認爲你是SOL。序列化程序需要知道可能在輸入中的類型。您可以嘗試使用NetDataContractSerializer。除了要序列化的數據之外,還輸出類型元數據。

+0

這個作品謝謝,我想知道你爲什麼不能用普通的序列化程序來做這件事。 – prof23030 2010-01-30 02:07:37

+0

由於常規序列化程序只是序列化爲可互操作的XML。你需要告訴它哪些類型是可能的,否則它不能反序列化。 NetDataContractSerializer通過向XML添加類型元數據來解決這個問題。這也是爲什麼你不能用它來與非.NET服務或客戶進行通信的原因。 – 2010-01-30 02:09:11

+0

我剛剛發現NetDataContractSerializer無法序列化在中等信任(我在共享主機,如果我嘗試序列化我得到安全例外),所以我想我會找到另一種方式。 – prof23030 2010-02-02 03:26:13

0

您可能會嘗試拆箱進入序列化程序的異常到System.Exception。如果這會產生真正的影響,我不會這樣做,但至少這種類型的傳遞可能會註冊爲標準。

(在黑暗中拍攝)