分享

java.lang.IllegalStateException: circular reference error Gson循环引用

 instl 2014-10-14

用Gson遇到一个循环引用错误,如下:

java.lang.IllegalStateException: circular reference error Offending field:XXX Offending object: preserveType: false, type: XXX, obj: XXX

以上错误中“XXX”代表报错的类型,一下都用“XXX”表示。

解决方案就是自定义一个序列化函数,并将其注册到Gson对象中去,如下:

  1. class XXXSerializer implements JsonSerializer<XXX> {  
  2.   
  3.     @Override  
  4.     public JsonElement serialize(XXX arg0, Type arg1,  
  5.             JsonSerializationContext arg2) {  
  6.         // TODO Auto-generated method stub  
  7.         JsonObject jsonObject = new JsonObject();  
  1. <span style="white-space:pre">            </span>// 这里将XXX的一些属性设置到jsonObject中去  
  2.             return jsonObject;  
  3.         }  
  4.   
  5.     }  
然后用GsonBuilder注册XXX,并用GsonBuilder创建Gson,并用其转换成Json如下:

  1. <span style="white-space:pre">    </span>GsonBuilder gsonBuilder = new GsonBuilder();  
  2.     gsonBuilder.registerTypeAdapter(XXX.class, new TableSerializer());  
  3.     gsonBuilder.registerTypeAdapter(XXX.class,new <span style="font-family: Arial, Helvetica, sans-serif;">XXXSerializer</span><span style="font-family: Arial, Helvetica, sans-serif;">());</span>  
  4.     Gson gson = gsonBuilder.create();  
  5.     String string = gson.toJson(TestObject);  

最后,如果不想某个属性被Gson转换成json,就用关键字transient修饰,如下:

  1. private transient String nanmeString;  


最后附上我用到的参考链接:

点击打开链接

点击打开链接





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多