GSON不序列化/反序列化扩展类

taor4pac  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(302)

GSON library中是否有一个选项(除了编写自定义序列化程序/反序列化程序),用于NOT在扩展类的某些级别之外进行序列化/反序列化。
例如,请参见以下用例

class FirstClass {
    int firstVariable;
}

class SecondClass extends FirstClass {
    int secondVariable;
}

class ThirdClass extends SecondClass {
    int thirdVariable;
}

现在,当使用fromJsontoJson时,我只想序列化/反序列化层次结构中的前两个类-ThirdClassSecondClass。这意味着它将忽略整个FirstClass(以及其中的firstVariable),因为它已经在level 3处。

kyks70gy

kyks70gy1#

您通常不能排除TopLevel类,您可以使用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加入至还原序列化。

qpgpyjmq

qpgpyjmq2#

下面的示例有助于在序列化期间跳过类中的某个变量

if (fieldAttributes.getDeclaringClass() == Example.class )
                && fieldAttributes.getName().equals("example")) {
            return true;
        }

相关问题