2011-12-22 39 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会不同。