2012-11-30 45 views
2

GSON library是否有一个选项(写入自定义序列化器/反序列化器除外)不是序列化/反序列化超出某个级别的扩展类。GSON不对序列化/反序列化扩展类

例如看到下面的用例

class FirstClass { 
    int firstVariable; 
} 

class SecondClass extends FirstClass { 
    int secondVariable; 
} 

class ThirdClass extends SecondClass { 
    int thirdVariable; 
} 

现在使用fromJsontoJson当我想唯一的序列化/反序列化前两类的层次 - ThirdClassSecondClass。这意味着它会忽略整个FirstClass(和firstVariable),因为这已经在level 3

+0

为什么编写自定义类型适配器有问题?你可以组成类型适配器,它可以消除大部分的维护痛苦。 –

回答

5

不能笼统排除顶层级,你可以做的是使用一个ExclusionStrategy

private static final Gson GSON = new GsonBuilder().addSerializationExclusionStrategy(new ExclusionStrategy() { 
    @Override 
    public boolean shouldSkipField(FieldAttributes f) { 
     return f.getDeclaringClass().equals(FirstClass.class); 
    } 

    @Override 
    public boolean shouldSkipClass(Class<?> clazz) { 
     return false; 
    } 
    }).create(); 

您还可以添加一个ExclusionStrategy到反序列化。

+0

那么除变量之外没有别的办法吗? – svenkapudija

+0

你可以随时编写你自己的自定义TypeAdapters或Serializer/Deserializer,但是我看不出有什么办法告诉Gson只能在层次结构中将de/serialize类的字段放低 –

+0

我稍微编辑了答案,现在'FirstClass'中的所有字段都是忽略。如果你知道你想忽略的课程,我想这是最简单的方法。 –