Я просмотрел множество вопросов GSON о десериализации интерфейсов, производном классе и т. Д. И нашел несколько хороших ответов.
Я недавно начал работать с некоторым унаследованным кодом, который содержит множество сложных сообщений. Коротким примером может быть:
public abstract class Message implements Serializable {
private final String messageSourceName;
protected Message(String mSN) {this.messageSourceName = mSN;}
}
public static abstract class EmployeeMessage extends Message {
EmployeeMessage(String sourceName, CustomClass1 cc1, CustomClass2){
super(sourceName);
this.customClass1 = cc1;
this.customClass2 = cc2;
}
}
public static class TeacherMessage extends EmployeeMessage {
public TeacherMessage(String sourceName, CustomClass1 cc1,
CustomClass2 cc2, CustomClass3 cc3){
super(sourceName, CustomClass1 cc1, CustomClass2 cc2);
this.customClass3 = cc3;
}
}
Итак, в настоящее время я пытаюсь сериализовать и десериализовать класс TeacherMessage, и я видел ответы, посвященные решению аналогичных проблем в Интернете, таких как настраиваемая сериализация и десериализация. и InstanceCreators. Тем не менее, дополнительная проблема заключается в том, что многие из этих «CustomClasses» не имеют конструкторов по умолчанию без аргументов, что приводит к ошибке при десериализации.
Мой вопрос: как лучше всего подойти к этой проблеме? Нужно ли создавать InstanceCreators для всех пользовательских классов в сообщениях? И будут ли пользовательские сериализации / десериализации использоваться для уровня сообщений или уровня EmployeeMessage?