2012-11-30 78 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'中的所有字段都是忽略。如果你知道你想忽略的課程,我想這是最簡單的方法。 –