3

あるレベルの拡張クラスを超えてシリアル化/逆シリアル化GSON libraryないオプション(カスタムシリアライザー/デシリアライザーの記述を除く)はありますか?

たとえば、次のユースケースを参照してください

class FirstClass {
    int firstVariable;
}

class SecondClass extends FirstClass {
    int secondVariable;
}

class ThirdClass extends SecondClass {
    int thirdVariable;
}

そして今、を使用しているときに、階層内の最初の2つのクラスのみをシリアル化/逆シリアル化したいfromJsonと思います-と。これは、すでににあるため、全体(およびその中)を無視することを意味します。toJsonThirdClassSecondClassFirstClassfirstVariablelevel 3

4

2 に答える 2

6

トップレベルクラスを一般的に除外することはできません。できることは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();

DeserializationにExclusionStrategyを追加することもできます。

于 2012-11-30T01:10:21.783 に答える
0

以下の例は、シリアル化中にクラス内の特定の変数をスキップするのに役立ちます

if (fieldAttributes.getDeclaringClass() == Example.class )
                && fieldAttributes.getName().equals("example")) {
            return true;
        }
于 2021-12-09T05:25:50.420 に答える