Пользовательский десериализатор GSON выдает ошибку, которая не имеет смысла - PullRequest
0 голосов
/ 17 марта 2020

Я получаю следующее исключение.

Caused by: java.lang.ClassCastException: Cannot cast java.util.LinkedList to com.example.weltliste.Task

в этой строке: tasks.add(g.fromJson(in, Task.class));

Вот полный метод + мой пользовательский десериализатор

public class FileHandler {
    private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
    Gson g = new GsonBuilder().setPrettyPrinting()
            .registerTypeAdapter(Task.class, new TaskSerializer())
            .registerTypeAdapter(Task.class, new TaskDeserializer()).create();

    public List<Task> read(InputStream stream) throws IOException {
        InputStreamReader in = new InputStreamReader(stream);
        List<Task> tasks = null;
        tasks.add(g.fromJson(in, Task.class));

        return tasks;
    }

Вот мой пользовательский десериализатор

public class TaskDeserializer implements JsonDeserializer<List<Task>> {

    @Override
    public List<Task> deserialize(JsonElement json,
            Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        List<Task> tasks = new LinkedList<>();
        JsonArray jsonArray = json.getAsJsonArray();

        for (int i = 0; i < jsonArray.size(); i++) {
            JsonObject jsonObject;
            jsonObject = jsonArray.get(i).getAsJsonObject();
            String title = jsonObject.get("title").getAsString();
            String value = jsonObject.get("value").getAsString();
            LocalDateTime date = LocalDateTime.parse(jsonObject.get("date").getAsString());
            boolean checked = jsonObject.get("checked").getAsBoolean();
            tasks.add(new Task(title, value, date, checked));
        }
        return tasks;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...