根据GSON中的值从序列化中排除某些字段
我使用GSON进行序列化,我没有找到根据Gson基于字段值提供的ExclusionStrategy类从序列化中排除某些字段的方法,因为它只支持基于排名的顶级类或字段属性。 字段属性不包括该字段的值。 所以我该怎么做?
实现此目的的方法是为相关类创建自定义序列化程序。 允许Gson以默认方式创建JSON对象后,根据其值删除要排除的属性。
public class SerializerForMyClass implements JsonSerializer { @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; } }
并在Gson对象中注册新的序列化程序,用于在此类的应用程序中进行序列化。
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(MyClass.class, new SerializerForMyClass()); Gson gson=gsonBuilder.create(); gson.toJson(myObjectOfTypeMyClass);
这是我写的一个类的更深入的例子,用于删除所有假布尔值以及所有“假”字符串。 它很快被抛到一起,但似乎工作正常。 如果您发现任何错误,请告诉我。
public class RemoveFalseJsonSerializer implements JsonSerializer