【发布时间】:2019-01-24 11:50:42
【问题描述】:
我有以下层次结构:
回复
public class Response implements Serializable {
@SerializedName("message")
@Expose
private List<Message> messages;
public List<Message> getMessages() {
return messages;
}
public void setMessages(List<Message> messages) {
this.messages = messages;
}
}
留言
public class Message implements Serializable {
@SerializedName("type")
@Expose
@MessageType
private int type;
@SerializedName("position")
@Expose
@MessagePosition
private String position;
public int getType() {
return type;
}
public String getPosition() {
return position;
}
public void setType(@MessageType int type) {
this.type = type;
}
public void setPosition(@MessagePosition String position) {
this.position = position;
}
}
文本 -> 消息
public class TextMessage extends Message {
@SerializedName("text")
@Expose
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
图片 -> 消息
public class ImageMessage extends Message {
@SerializedName("attachment")
@Expose
private Attachment attachment;
public Attachment getAttachment() {
return attachment;
}
public void setAttachment(Attachment attachment) {
this.attachment = attachment;
}
}
尝试使用 GSon 以这种方式反序列化 Message 会(自然)导致 text 或 attachment 字段处的空字段。 我想要一个最合适的反序列化,它会根据响应在运行时选择与大多数字段匹配的消息类型(即文本或图像)。
到目前为止,我唯一的想法是:
1 - 使用 @JsonAdapter -> 无效
2 - 创建另一个层次结构以在编译时指向类,例如:
---- Response
|
- TextResponse -> List<TextMessage>
|
- ImageResponse -> List<ImageMessage>
第二个选项并不是我真正想要的,它让我增加了类的数量,这可能会变得过于复杂而无法应用以后的维护。
有人知道解决这个问题的方法吗?有什么可以应用的框架或概念吗?
提前致谢
【问题讨论】:
标签: java android inheritance gson deserialization