如果对象的所有字段都为空,如何将其设置为空?
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()==null
为 true
但当 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);
}
如果对象的所有字段都为 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()==null
为 true
但当 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);
}