【问题标题】:How to exclude objects from serializing based on some values witg GSON?如何根据 GSON 的某些值从序列化中排除对象?
【发布时间】:2020-06-06 19:35:42
【问题描述】:
我有一个像这样的 POJO 类制作的 json 结构 -
{
"arrayA":[
{
"arrayB":[
{
"arrayC":[
{
"base64String":null
},
{
"base64String":"base 64 value here"
}
]
}
]
}
]
}
如您所见,arrayC 中的对象有一个名为 base64String 的字段。现在这个 base64String 有时可能为 null,所以在将 POJO 序列化为 json 时,有没有办法检查这个 base64String 是否为 null 并从序列化中省略该特定对象?
【问题讨论】:
标签:
java
android
json
serialization
gson
【解决方案1】:
查看文档,我可以自己完成。如果其他人需要这个,请在这里回答。我们需要使用 Gson 提供的JsonSerializer 来检查正在序列化的值。
public class SerializeFiles implements JsonSerializer<MyClass> {
@Override
public JsonElement serialize(MyClass src, Type typeOfSrc, JsonSerializationContext context) {
Gson gson = new Gson();
JsonObject object = (JsonObject) gson.toJsonTree(src);
JsonArray arrayA = object.getAsJsonArray("arrayA");
for (JsonElement element : arrayA) {
JsonObject objA = element.getAsJsonObject();
JsonArray arrayB = insObj.getAsJsonArray("arrayB");
for (JsonElement elementB : arrayB) {
JsonObject objB = elementB.getAsJsonObject();
JsonArray arrayC = objB.getAsJsonArray("arrayC");
for(JsonElement elementC : arrayC) {
JsonObject objectC = elementC.getAsJsonObject();
if(objectC.get("base64String") == null) {
arrayC.remove(objB);
}
}
}
return object;
}
}