2011-12-22 2 views
0

Я получаю java.io.NotSerializableException.Сериализация объекта из внешнего API

Как я могу сериализовать объект, который не реализует java.io.Serializable?

Я хотел бы сериализовать его в потоке.

Я хочу сериализовать объект из внешнего API. Я не могу изменить этот API.

Во внешнем API, этот объект не реализует java.io.Serializable

Конечно есть частные поля, но есть много методов получения и установки. Существуют публичные статические поля, и нет конструктора no-arg, на самом деле нет конструктора.

Я думаю, что это сложно сериализовать, не так ли? Любое предложение?

ответ

1

Если вы можете переопределить внешний API, вы можете создать свой собственный класс, который является дочерним по отношению к внешнему классу.

Ваш дочерний класс может реализовать интерфейс Serializable, и вы можете сериализовать свой класс.

Для экс-

ур внешнего класса

class ExternalAPIClass 
{ 
.. 
.. 
} 

Class MyClass extends ExternalAPIClass implements Serializable 
{ 

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

Проблема заключается в том, что этот ExternalAPIClass использует объект, который также не сериализуется. – Jvrq

+0

Проблема заключается в том, что этот ExternalAPIClass использует объект, который также не является сериализуемым. Должен ли я переопределить этот AnotherEXternalAPIClass тоже? – Jvrq

+0

, тогда в этом случае несериализуемые части вашего суперкласса должны быть доступны из вашего дочернего класса (MyClass), и вы можете написать свои собственные методы для пользовательской сериализации этих частей. Кроме того, обратите внимание, что ваш суперкласс (ExternalAPIClass) должен иметь конструктор аргументов по умолчанию в этом случае. реализовать writeObject() и readObject() и выполнить ручную сериализацию/десериализацию этих несериализуемых полей. –

0

Из того, что я понял из вашего вопроса, вы можете создать новые экземпляры этого объекта, а также задать свои поля с помощью сеттеров. Затем я предлагаю вам использовать геттеры для извлечения всех полей объекта в карту, а затем сериализации этой карты.

Позже вы выполните десериализацию карты, создайте новый экземпляр объекта и установите все поля обратно с помощью сеттеров.

Конечно, это предполагает, что не существует поля только для чтения, которое устанавливается во время построения, например, ID. Потому что в этом случае идентификаторы будут разными.

Смежные вопросы