2011-12-22 49 views
0

我收到java.io.NotSerializableException。從外部API序列化對象

如何序列化不執行java.io.Serializable的對象?

我想序列化它在一個流中。

我想從外部API序列化一個對象。我無法修改這個API。

在外部API,這個對象沒有實現當然java.io.Serializable

有私人領域,但也有大量的getter和setter方法。 有公共靜態字段,並且沒有無參數構造函數,實際上,沒有構造函數。

我認爲很難序列化它,不是嗎? 有什麼建議嗎?

回答

1

如果你可以重寫外部API可以創建你自己的類,這是外部類的子類。

你的孩子類可以實現Serializable接口,你可以序列化你的類。

爲前

烏爾外部類是

class ExternalAPIClass 
{ 
.. 
.. 
} 

Class MyClass extends ExternalAPIClass implements Serializable 
{ 

.... 
... 
... 
} 
+0

問題是,這個ExternalAPIClass使用了一個不可序列化的對象。 – Jvrq 2011-12-22 17:56:45

+0

問題是,這個ExternalAPIClass使用了一個不可序列化的對象。我需要重寫這個AnotherEXternalAPIClass嗎? – Jvrq 2011-12-22 18:03:17

+0

那麼在這種情況下,應該可以從您的子類(MyClass)訪問您的超類的不可序列化部分,並且您可以編寫自己的方法來自定義這些部分的序列化。另外,請注意你的超類(ExternalAPIClass)在這種情況下應該有一個默認的無參數構造函數。 實現writeObject()和readObject()並對那些不可序列化的字段進行手動序列化/反序列化。 – 2011-12-22 18:22:54

0

從我從你的問題明白了,你可以創建一個對象的新實例,並通過制定者設定各自的領域。然後我建議你使用getters將對象的所有字段提取到一個Map中,然後序列化該映射。

之後,您將反序列化映射,創建對象的新實例,並使用setter將所有字段設回。

當然,這是假定沒有任何只讀字段在施工時設置,如ID。因爲在這種情況下,ID會不同。