2009-12-10 71 views
1

Supose我用BinaryFormatter序列化了第三方庫類型對象。未引用此庫的組件會嘗試反序列化字節。它會起作用嗎?IFormatter是否可以取消未引用類型的對象?

我不希望它被強制轉換爲正確的類型,我只是想找回它作爲object實例,這樣就可以組並再次對其進行序列化。

回答

2

這應該做工精細,但前提是該庫部署與應用。你不需要直接引用它。

在序列化期間,BinaryFormatter將存儲完整程序集名稱(顯示名稱,公鑰標記,版本號)以及類型信息。這對於解串器來說是足夠的信息,並且再次加載該程序集。請注意,路徑信息並未存儲,因此需要在執行反序列化的應用程序中部署程序集。

+0

與downvote是什麼?這個信息是錯誤的嗎? – 2009-12-10 19:32:02

+0

兩個羅賓遜在同一線程=) – 2009-12-10 19:54:05

1

否;如果類型本身沒有被引用(以某種方式由某個加載的程序集引用),那麼它不能被實例化。即使您不需要(或想要)以強類型的方式引用實例,對象本身仍然必須是該類型的實例。

如果程序集可用(和發現),那麼它將被加載,但在嚴格意義上沒有,你將無法從一個完全未引用的組件反序列化類型。

0

不,它不會工作,爲了反序列化您需要引用定義對象的程序集的對象。

1

如果您只是想暫時獲得序列信息,以便您可以組它,你能剛剛從序列化流,並將它們組合讀取原始字節?也許成爲List<byte[]>實例?這假定最終目的地可以對每個字節數組表示的信息做出一些假設。

+0

感謝您的建議 – 2009-12-10 19:52:17

0

是的,如果你創建一個序列化綁定器,你可以反序列化爲不同類型的類型。但你不能夠實例化的原始類型的實例沒有它的定義(到你需要手頭上有裝配)

相關問題