根据GSON中的值从序列化中排除某些字段

Ath*_*rva 7 java serialization json gson

我使用GSON进行序列化,我没有找到根据Gson基于字段值提供的ExclusionStrategy类从序列化中排除某些字段的方法,因为它只支持基于排名的顶级类或字段属性.字段属性不包括该字段的值.所以我该怎么做?

Ath*_*rva 22

实现此目的的方法是为相关类创建自定义序列化程序.允许Gson以默认方式创建JSON对象后,根据其值删除要排除的属性.

public class SerializerForMyClass implements JsonSerializer<MyClass> {  

    @Override
    public JsonElement serialize(MyClass obj, Type type, JsonSerializationContext jsc) {
        Gson gson = new Gson();
        JsonObject jObj = (JsonObject)gson.toJsonTree(obj);   
        if(obj.getMyProperty()==0){
            jObj.remove("myProperty");
        }
        return jObj;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在Gson对象中注册新的序列化程序,用于在此类的应用程序中进行序列化.

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MyClass.class, new SerializerForMyClass());
Gson gson=gsonBuilder.create();
gson.toJson(myObjectOfTypeMyClass);
Run Code Online (Sandbox Code Playgroud)