2 回答
TA贡献1856条经验 获得超5个赞
也许你可以使用 Gson extras RunTimeTypeAdapterFactory。检查这个例子:
RuntimeTypeAdapterFactory<Message> factory = RuntimeTypeAdapterFactory
.of(Message.class, "type") // actually type is the default field to determine
// the sub class so not needed to set here
// but set just to point that it is used
// assuming value 1 in field "int type" identifies TextMessage
.registerSubtype(TextMessage.class, "1")
// and assuming int 2 identifies ImageMessage
.registerSubtype(ImageMessage.class, "2");
然后GsonBuilder.registerTypeAdapterfactory(factory)用这个。
这只是从 Gson 核心库中找不到。你需要在这里取。您可能还可以从全球 repo 中找到一些 Maven/Gradle dep 有人已经完成但也许最简单的就是复制这个文件。
如果您需要修改其行为,它会启用以后的黑客攻击。
TA贡献1942条经验 获得超3个赞
我使用GodClass
具有所有消息类型字段的方法实现了这一点。
但是您不会在应用程序中将此 POJO 类用作 DTO(数据传输对象)。
Json
是一个协议,不支持Inheritance
等等。
在同一场景中,我为 DTO 实现了这种继承和层次结构。
PS:我的答案中的 DTO 是我们传递的模型,例如 inAdapter
或 anActivity
等等。
添加回答
举报