2016-11-16 4 views
0

Google's Gson.toJson (Objekt src) konvertiert keine booleschen Werte. Zum Beispiel ist mein Java-Objekt sagen:Gson.toJson konvertiert keine booleschen Werte von Objekt

class MyObj { 
    private String name; 
    private boolean teen; 

    //getter,setter ommitted... 
    } 

MyObj obj = new MyObj(); 
obj.setName("Me"); 
obj.isTeen(false); 

Gson.toJson(obj); 

Während dieses Objekt konvertiert es wie dieser

MyObj { "name" : "Me" } 

boolean fehlt das Schreiben ist, obwohl es ein Wert war.

Antwort

1

Gson serialisiert die Felder nur dann nicht, wenn das Feld als transient oder static definiert ist.

Wenn Sie das boolesche Feld nicht als statisch oder transient definiert haben, sollte json dieses Feld haben.

Ich bin nicht sicher, wie Sie den Wert auf boolean Feld mit isTeen() Methode festlegen. Es sollte Kompilierungsfehler geben, es sei denn, Sie haben eine nicht-triviale "is" -Methode für ein boolesches Feld. Die "is" -Methode ist im Grunde eine Entsprechung der "get" -Methode für String/andere Felder. Normalerweise wird es nicht zum Festlegen des Werts verwendet.

Ich habe gerade den vollständigen Code mit Getters und Setter bereitgestellt. Bitte überprüfen Sie, ob das funktioniert.

public class MyObj { 

    private String name; 

    private boolean teen; 
    public String getName() { 
     return name; 
    } 
    public boolean isTeen() { 
     return teen; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public void setTeen(boolean teen) { 
     this.teen = teen; 
    } 
} 

Haupt Methode: -

public static void main(String[] args) { 

     Gson gson = new Gson(); 

     MyObj obj = new MyObj(); 
     obj.setName("Me"); 
     obj.setTeen(false); 

     System.out.println(gson.toJson(obj)); 
    } 

Ausgang: -

{"name":"Me","teen":false} 

Der interessante Punkt ist, dass, auch wenn Sie für boolean Feld einen beliebigen Wert nicht festlegen. Es wird den Standardwert false annehmen und der generierte JSON wird false haben.

+0

Ja, das war ein Typ über die Methode isTeen(). Es war tatsächlich setTeen() Methode. Ich habe das nicht wirklich von meiner Codebasis kopiert. Ich habe direkt von hier geschrieben. Das Seltsame ist, dass ich meinen Code nicht geändert habe, aber nach einem Tag hat er angefangen zu arbeiten. Ich bin mir nicht sicher, was ich vermisst habe, da ich sehr verwirrt war, als es zum ersten Mal nicht funktionierte. – Sujoy

+0

ok gut. Möchten Sie die Antwort nur akzeptieren, um sicherzustellen, dass es im Code oder in der API kein Problem gibt? Manchmal, wenn Sie komplexe Dinge in kleinere Stücke zerlegen, könnte es einen Hinweis darauf geben, dass das Problem an einem anderen Ort sein könnte. – notionquest

Verwandte Themen