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
等等。
添加回答
舉報