Сериализация SparseArray <T> с помощью GSON

Я хочу сериализовать пользовательский объект Java, чтобы я мог использоватьSharedPreferences сохранить его и получить в другой деятельности. Я нет требуется постоянное хранение,SharedPreferencesЯ стираю их, когда мое приложение закрыто. Я'Я в настоящее время использую GSON для этого, но это некажется, хорошо работает с AndroidТип SparseArray.

Мои объекты:

public class PartProfile {

private int gameId;
// Some more primitives
private SparseArray installedParts = new SparseArray();

// ...
}

public class Part {
   private String partName;
   // More primitives
}

Сериализация:

Type genericType = new TypeToken() {}.getType();
String serializedProfile = Helpers.serializeWithJSON(installedParts, genericType);
preferences.edit().putString("Parts", serializedProfile).commit();

serializeWithJSON ():

public static String serializeWithJSON(Object o, Type genericType) {
    Gson gson = new Gson();
    return gson.toJson(o, genericType);
}

Десериализация:

Type genericType = new TypeToken() {}.getType();
PartProfile parts = gson.fromJson(preferences.getString("Parts", "PARTS_ERROR"), genericType);

SparseArray retreivedParts = parts.getInstalledParts();
int key;
for (int i = 0; i < retreivedParts.size(); i++) {
    key = retreivedParts.keyAt(i);
    // Exception here:
    Part part = retreivedParts.get(key);
    // ...
}

Исключение:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.mypackage.objects.Part

Я нене понимаю, почему Гсон хочет разыгратьLinkedTreeMap к моему объекту, я никогда не использую один во всей моей программе. Я имел обыкновение иметьHashMap прежде чем я переключился наSparseArrayи никогда не было проблем с этим. Разве SparseArrays не поддерживаются Gson, или на моей стороне ошибка?

Редактировать: Кажется, что SparseArray корректно десериализуется, но не объекты внутри. ВместоLinkedTreeMaps, они должны быть типа.Part

Ответы на вопрос(2)

Ваш ответ на вопрос