問(wèn)題
當(dāng)我們用 fastjson 如下 API 轉(zhuǎn)成 List<T> 這種類(lèi)型時(shí),會(huì)遇到類(lèi)型丟失的問(wèn)題
com.alibaba.fastjson.JSON#parseObject(java.lang.String, java.lang.Class<T>)
解決方案
String testJSON = "[{\"type\":\"a\"},{\"type\":\"b\"}]";
List<Button> buttons = JSON.parseObject(testJSON, new TypeReference<ArrayList<Button>>() {});
或者還有一種更通用的轉(zhuǎn)換方式
List<Button> buttons = JSON.parseArray(testJSON, Button.class);
更多
同理住诸,這種同樣可以解決 Map 的問(wèn)題
String testMapJSON = "{\"1\":{\"type\":\"a\"},\"2\":{\"type\":\"b\"}}";
Map<String, Button> buttonMap = JSON.parseObject(testMapJSON, new TypeReference<HashMap<String, Button>>() {});
如果是嵌套層次中屬性有接口或父類(lèi)型的藕甩,JSON 實(shí)際類(lèi)型需要額外 @type 屬性來(lái)指定當(dāng)前類(lèi)型吧黄,并且要放到 JSON 類(lèi)字符串的第一行肺魁。