Как десериализовать объект определенного типа из JSON в Java, если он был сериализован в JSON как объект? - PullRequest
0 голосов
/ 07 декабря 2018

Я новичок в Java!

Моя цель: у меня есть коллекция объектов, которая позволяет мне сохранять объекты любых типов с помощью некоторого ключа (например, карты) (положить их и получить из).Я могу добавить объекты любого типа к нему (например, я могу добавить объект MyClass).Затем я сериализую этот объект, чтобы разделить строку в формате JSON, используя GSON (тогда я могу, например, сериализовать эту строку в отдельный файл).Когда я хочу вернуть какой-то объект, я запрашиваю его из коллекции по ключу, и коллекция десериализует соответствующую строку в объекте Object и возвращает ее мне.Затем я приведу его к MyClass, чтобы иметь возможность использовать этот объект.

Приведенный ниже код пропускает работу с коллекцией:

    Gson gson = new Gson();
    Object myClass = new MyClass(); //imitation of putting MyClass object to Collection
    String json = gson.toJson(myClass); //serializing to JSON
    Object myClass1 = gson.fromJson(json, Object.class); //imitation of deserializing and getting object from collection
    Main.MyClass myClass2 = (Main.MyClass) myClass1;

Последняя строка этого кода вызывает java.lang.ClassCastException, потому что "gson.fromJson (json, Object.class);"возвращает объект типа "com.google.gson.internal.LinkedTreeMap"

Как мне достичь своей цели ???

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

gson.fromJson(json, Object.class); приведение к LinkedTreeMap (см. Источники gson в ObjectTypeAdapter.read(JsonReader in)).

Попробуйте это:

Gson gson = new Gson();
Object myClass = new MyClass(); //imitation of putting MyClass object to Collection
String json = gson.toJson(myClass); //serializing to JSON
Main.MyClass myClass2 = gson.fromJson(json, Main.MyClass.class);
0 голосов
/ 07 декабря 2018

Это может быть потому, что когда вы используете gson.fromJson(json, Object.class), вы приводите его к объекту, а не к своему MyClass, возможно, если вы используете gson.fromJson(json, MyClass.class), а затем приводите его, чтобы он возвращал правильные значения.В противном случае они создадут простой объектный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...