I had huge problems deserializing a List<IWorkout>, since it would throw
java.lang.RuntimeException: Unable to start activity ComponentInfo{MY PACKAGE}: java.lang.RuntimeException: Unable to invoke no-args constructor for interface MY INTERFACE. Registering an InstanceCreator with Gson for this type may fix this problem. 
But I solved it by deserializing it to a List<Workout> (which implements the interface IWorkout), and then adding it to a List<IWorkout>.
Code example of my solution :
public ArrayList <IWorkout> loadUserWorkoutList(){
    Gson gson = new Gson();
    Type workoutListType = new TypeToken<ArrayList<Workout>>(){}.getType();
    List <Workout> workoutList = gson.fromJson(loadWorkoutDataFromSharedPreferences(), workoutListType);
    if (workoutList == null){
        workoutList = new ArrayList<>();
    }
    ArrayList<IWorkout> iWorkoutList = new ArrayList<>(workoutList);
    return iWorkoutList;
}
But the problem now is that the Workout contains another List<IExercise> which I can't (or at least can't figure out how to) perform this "trick" on. The entire IWorkout list is serialized like this : 
private String workoutListToJsonString(List<IWorkout> list) {
    Gson gson = new Gson();
    String jsonString = gson.toJson(list);
    return jsonString;
}
and it throws the same error as before when I try to deserialize it.
Does anyone have any ideas on how to solve this?
I've tried using the adapter provided by Narthi, but to no success.
Thanks in advance
