2014-09-12 7 views
10

Ich habe eine Java-Klasse mit vielen Integer-Felder und wenn ich sie zu JSON String serialisieren wollen, weil einige von ihnen keinen Wert haben könnte, daher nach der Serialisierung alle Ganzzahlen erhalten Null als Werte! Ich möchte Gson nicht serialisieren, wenn sie keine Werte haben.wie gson zu konfigurieren, 0 ganzzahlige Werte auszuschließen

zum Beispiel habe ich diese Klasse:

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

standardmäßig Gson gibt mir dieses Ergebnis:

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

, aber ich möchte nicht, dass die userId serialisiert werden, wenn sein Wert 0 ist. so sollte der JSON sein:

für Objekte standardmäßig ist gson nicht null Objekte serialisieren ist die re ein Weg zur Konfig gson nicht zu 0 Zahlen

+0

Mögliches Duplikat [Mit Gson, wie einen numerischen Typen auszuschließen (Doppel, integer) mit Standardwert von Serialisierung?] (Http://stackoverflow.com/questions/5316787/using-gson-how- to-exclude-a-numeric-type-double-integer-with-default-Wert-f) – tir38

Antwort

4

Sie können eine benutzerdefinierte TypeAdapter schreiben.

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

es mit Code Versuchen Sie unter:

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

Ausgang wird sein:

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

Hinweis: Wesentlicher Teil ist bei write Methode unserer kundenspezifischen TypeAdapter.

+0

Große Antwort! Vielen Dank! – zhaoyuanjie

26

Wir müssen nur Klasse Integer verwenden.

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

Dies ist nicht genau das, was die Frage verlangt. In diesem Beispiel haben Sie 0 gegen Null ausgetauscht und nutzen die GSON-Funktion "Keine Nullen serialisieren". – CarlG

+0

Dies ist nicht die richtige Antwort –

Verwandte Themen