小编jlo*_*les的帖子

Gson中的自循环引用

我有一些问题要反序列化遵循这种格式的Json数组:

[
{
  "ChildList":[
     {
        "ChildList":[

        ],
        "Id":110,
        "Name":"Books",
        "ApplicationCount":0
     }
  ],
  "Id":110,
  "Name":"Books",
  "ApplicationCount":0
}
]
Run Code Online (Sandbox Code Playgroud)

它基本上是一个类别数组,其中每个类别也可以有一个子类别列表,依此类推.我的班级模型看起来有点像这样:

public class ArrayOfCategory{
    protected List<Category> category;
}

public class Category{

    protected ArrayOfCategory childList;
    protected int id;
    protected String name;
    protected int applicationCount;
}
Run Code Online (Sandbox Code Playgroud)

现在,Gson明显抱怨循环引用.有没有办法解析这个Json输入,因为我不能假设有多少级别的类别?提前致谢.

编辑: 为了防止有人遇到类似的问题,根据Spaeth的回答,我使用反射将解决方案改编为更一般的情况.唯一的要求是JSON数组表示的对象列表包装在另一个类中(如我的例子中的Category和ArrayOfCategory).使用以下代码应用于我的原始示例,您只需调用"deserializeJson(jsonString,ArrayOfCategory.class)",它将按预期工作.

private <T> T deserializeJson(String stream, Class<T> clazz) throws PluginException {
    try {
        JsonElement je = new JsonParser().parse(stream);
        if (je instanceof JsonArray) {
            return deserializeJsonArray(clazz, je);
        } else {
            return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create().fromJson(stream, clazz);         
        }
    } catch (Exception …
Run Code Online (Sandbox Code Playgroud)

java json circular-reference gson

6
推荐指数
1
解决办法
6059
查看次数

将自定义代码样式 xml 传递给 gradle idea 插件

有没有办法告诉gradle idea插件在生成项目文件时使用自定义代码样式xml?

我总是可以将 xml 复制到“~/Library/Preferences/IntelliJIdea13/codestyles”中,然后在导入项目后更改代码样式,但我希望 gradle 插件在生成过程中自动为我执行此操作。

谢谢!

xml code-formatting gradle intellij-13 idea-gradle-plugin

5
推荐指数
1
解决办法
1790
查看次数