如何configurationgson排除0整数值

我有一个很多的整数字段的Java类,当我想序列化这个类到JSON的一些可能没有价值。 所以序列化后,我有0整数的json! 我想configurationgson不要序列化它们。

例如我有这个类:

class Example { String title = "something"; int id = 22; int userId; } 

默认情况下,gson给了我这个结果:

 { "title" : "something", "id" : 22, "userId" : 0 } 

但我不希望userId的值为0时序列化,所以JSON应该是:

 { "title" : "something", "id" : 22 } 

对于默认的对象gson不会序列化空对象是否有办法configurationgson不序列化0号码

Solutions Collecting From Web of "如何configurationgson排除0整数值"

我们必须使用类Integer。

 class Example { String title = "something"; Integer id = 22; Integer userId; } 

你可以写一个自定义的TypeAdapter

 public class ExampleTypeAdapter extends TypeAdapter<Example> { @Override public Example read(com.google.gson.stream.JsonReader in) throws IOException { final Example example = new Example(); in.beginObject(); while (in.hasNext()) { String name = in.nextName(); if ("title".equals(name)) { example.title = in.nextString(); } else if ("id".equals(name)) { example.id = in.nextInt(); } else if ("userId".equals(name)) { example.userId = in.nextInt(); } } in.endObject(); return example; } @Override public void write(com.google.gson.stream.JsonWriter out, Example example) throws IOException { out.beginObject(); out.name("title").value(example.title); if(example.id != 0) { out.name("id").value(example.id); } if(example.userId != 0) { out.name("userId").value(example.userId); } out.endObject(); } } 

尝试下面的代码:

 GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Example.class, new ExampleTypeAdapter()); gsonBuilder.setPrettyPrinting(); Gson gson = gsonBuilder.create(); Example example = new Example(); example.title = "mytitle"; example.id = 1234; example.userId = 0; final String json = gson.toJson(example); System.out.println(json); 

输出将是:

  { "title": "my title", "id": 1234 } 

注意:重要的部分是我们自定义的TypeAdapter write方法。