用Gson遇到一個(gè)循環(huán)引用錯誤,如下:
java.lang.IllegalStateException: circular reference error Offending field:XXX Offending object: preserveType: false, type: XXX, obj: XXX
以上錯誤中“XXX”代表報錯的類(lèi)型,一下都用“XXX”表示。
解決方案就是自定義一個(gè)序列化函數,并將其注冊到Gson對象中去,如下:
- class XXXSerializer implements JsonSerializer<XXX> {
-
- @Override
- public JsonElement serialize(XXX arg0, Type arg1,
- JsonSerializationContext arg2) {
- // TODO Auto-generated method stub
- JsonObject jsonObject = new JsonObject();
- <span style="white-space:pre"> </span>// 這里將XXX的一些屬性設置到j(luò )sonObject中去
- return jsonObject;
- }
-
- }
然后用GsonBuilder注冊XXX,并用GsonBuilder創(chuàng )建Gson,并用其轉換成Json如下:
- <span style="white-space:pre"> </span>GsonBuilder gsonBuilder = new GsonBuilder();
- gsonBuilder.registerTypeAdapter(XXX.class, new TableSerializer());
- gsonBuilder.registerTypeAdapter(XXX.class,new <span style="font-family: Arial, Helvetica, sans-serif;">XXXSerializer</span><span style="font-family: Arial, Helvetica, sans-serif;">());</span>
- Gson gson = gsonBuilder.create();
- String string = gson.toJson(TestObject);
最后,如果不想某個(gè)屬性被Gson轉換成json,就用關(guān)鍵字transient修飾,如下:
- private transient String nanmeString;
最后附上我用到的參考鏈接:
點(diǎn)擊打開(kāi)鏈接
點(diǎn)擊打開(kāi)鏈接
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。