Gson сериализует / десериализует с универсальным объектом, который является вложенным - PullRequest
0 голосов
/ 31 января 2019

Я сослался на несколько вопросов по SO, например, google gson fromjson () TypeToken и Gson TypeToken с динамическим типом элемента ArrayList , но не смог найти решение для точного варианта использования.

Моя иерархия объектов выглядит следующим образом:

class A
{
    List<? extends Parent> files;
    A(List<? extends Parent> files){
        this.files = files;
    }
}


class B extends A
{
    B(List<Child> files){
        super(files);
    }


}

Interface Parent{}

class Child implements Parent{

}

И мой код tojson:

A data = new B(files);

try(Writer writer = new FileWriter(outputFile)) 
{
    Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
    gson.toJson(data,writer);
    writer.flush();
}

При установке отладчика я обнаружил, что переменная данных заполнена, ноВыходной файл содержит пустой список.

В приведенных выше сообщениях я рассмотрел возможное решение, а именно:

Type listType = new TypeToken<ArrayList<YourClass>>(){}.getType();

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

...