【问题标题】:How to set an object null if all of its fields are null?如果对象的所有字段都为空,如何将对象设置为空?
【发布时间】:2018-12-27 14:08:25
【问题描述】:

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

反序列化

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;
}

JSONdisconnect 应为空

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

JSONdisconnect 应该为空

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

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

【问题讨论】:

    标签: json gson deserialization json-deserialization


    【解决方案1】:

    您的问题是您的 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多