如果对象的所有字段都为空,如何将其设置为空?

How to set an object null if all of its fields are null?

如果对象的所有字段都为 null,如何将其设置为 null?

反序列化

Gson gson = new Gson();
DetailUser detailUser = gson.fromJson(json, DetailUser.class);

DetailUser 如果所有字段都为空,断开连接应该为空

public class DetailUser {
    String email;
    Integer age;
    Disconnect disconnect;
}

断开连接

public class Disconnect {
    String text;
    String beginning;
    String end;
}

JSON 其中 disconnect 应该为 null

{
    "email":"test@test.test",
    "age":33,
    "disconnect":{}
}

JSON disconnect 应该 not 为 null

{
    "email":"test@test.test",
    "age":33,
    "disconnect":{
                  "text":"test",
                  "beginning":"test",
                  "end":"test"
                 }
}

我希望 detailUser.getDisconnect()==nulltrue 但当 Disconnect 字段(文本、开头、结尾)全部为 null 时得到 false

您的问题是您的 json 中有一个 Disconnect 对象,它具有所有字段 null。 Gson 正在正常工作,但如果你想让 Disconnect 成为 null,只要它的所有字段都是 null,你有一些选择。

一个选项是创建自定义 JsonDeserializer,例如:

public class NullAdapter implements JsonDeserializer<Disconnect> {
    @Override
    public Disconnect deserialize(JsonElement json, Type typeOfT,
                JsonDeserializationContext context)
            throws JsonParseException {
        Disconnect dc = new Gson().fromJson(json, typeOfT);
        // Here you decide the criteria in which case to return the Disconnect or null
        // I decided that if any of its fields is not null it is neither null
        if (dc.beginning != null || dc.text != null || dc.end != null) {
            return dc;
        }
        return null;
    }
}

通过 GsonBuilder() 注册进行测试:

@Test
public void test() {
    DetailUser du = new GsonBuilder()
            .registerTypeAdapter(Disconnect.class, new NullAdapter())
            .create()
            .fromJson(**YOUR_NULL_JSON**, DetailUser.class);
    assertNull(du.disconnect);
}