gson中的排除策略

时间:2013-04-29 19:13:01

标签: java json gson

我的JSON具有以下结构:

{"name": [9000, {Inst1}, ..., {Instn}]}

其中9000是任意整数,Insti是某类的序列化实例。 我正在使用这样的东西将所有Inst放入列表中:

Type listType = new TypeToken<ArrayList<Song>>(){}.getType();

并尝试通过写下这样的东西来排除第一个int:

public class ExcludeTotalFound implements ExclusionStrategy {
    private final Class<?> typeToSkip;

    public ExcludeTotalFound(Class<?> typeToSkip) {
        this.typeToSkip = typeToSkip;
    }
    public boolean shouldSkipClass(Class<?> clas_s) {
        return clas_s == typeToSkip;
    }
    public boolean shouldSkipField(FieldAttributes fieldAttributes) {
        return typeToSkip.equals(fieldAttributes.getDeclaredClass());
    }
}

最后,我正在做

gson = new GsonBuilder().addDeserializationExclusionStrategy(new ExcludeTotalFound(int.class)).serializeNulls().create();

然后:

collection = gson.fromJson(rBody, listType);

其中rBody就是原始数组,即{"name": [9000, {Inst1}, ..., {Instn}]

但我得到的只是

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER`

有什么问题?

ADD: 只要我知道我的JSON的长度永远不会超过~500,并且结构总是保持不变,那么使用以下解决方法是否足够好?

Iterator<JsonElement> it = rBody.iterator();
it.next();
while (it.hasNext()) {
    collection.add(gson.fromJson(it.next(), Song.class));
}

1 个答案:

答案 0 :(得分:0)

这看起来非常类似于我在这里回答的那个 - &gt; Gson custom deserialization。这有帮助吗?这不是排除,而是通过自定义反序列化。