2017-07-13 5 views
1

Ich versuche, ein JSON zu nehmen und konvertieren Sie es in ein POJO mit Gson Fähigkeit. Ich habe es mit der serialisierten Klasse als Klasse in einem separaten Paket arbeiten lassen, aber jetzt versuche ich, die serialisierte Klasse zu einer inneren Klasse der Klasse zu machen, die sie aufruft, ähnlich wie ich sie unten dargestellt habe.Gson zu pojo Serialisierung der inneren Klasse

public class A { 
    private final Gson gson; 

    public A() { 
     gson = new GsonBuilder().serializeNulls().create(); 
    } 

    public void foo(String json){ 
     B b = gson.fromJson(json, B.class); 
    } 

    public static class B { 
     private String bar; 

     public String getBar(){ 
      return bar; 
     } 
    } 
} 

Beispiel JSON:

{"bar": "test"} 

Diese Einstellung liefert Nullwerte für die inneren Klassenvariablen; In diesem Fall einfach bar. Ich habe sichergestellt, dass der übergebene JSON mit den Namen der Variablen in Klasse B übereinstimmt, in diesem Beispiel. Zusätzlich habe ich experimentiert, um die innere Klasse nicht-statisch und privat zu machen, ohne Erfolg. Nach meinem Verständnis muss es eine statische Klasse sein, damit es mit gson serialisiert werden kann. Ist etwas offensichtlich offensichtlich, dass ich falsch mache, dass Sie sehen können?

+0

Könnte es sein, dass Sie den Setter für * bar * vermissen? Können Sie einen Beispiel-JSON posten? – watery

+0

Ich dachte nicht, dass es das ist, da dies die genauen Klassen sind, die ich hatte, als es in einem separaten Paket arbeitete, im Gegensatz zu einer inneren Klasse. Ging voraus und versuchte es trotzdem und hatte kein Glück. Ich bearbeite meinen Beitrag, um einen Beispiel-JSON hinzuzufügen. – Mitch

+0

Warum haben Sie 'gson' als Parameter für die 'foo'-Funktion, wenn alles sofort passiert ist, dass es sofort überschrieben wird? – Michael

Antwort

0

So stelle ich mir dies ein weit verbreitetes Problem ist jetzt, dass ich in sie zweimal ausgeführt haben. Das Problem trat in der JSON-Zeichenfolge auf, die übergeben wurde. Ich kopierte die JSON-Datei und fügte sie von irgendwo in die Befehlszeile ein. Daher wurden die Angebote nicht als gültige Anführungszeichen registriert. Es war im Gegensatz zu ". Die zweite ist, was als Anführungszeichen registriert ist. Danke für die Hilfe.

0

Der Fehler ist woanders. Höchstwahrscheinlich ist der String oder der Gson, den Sie übergeben, falsch konfiguriert. Ich klebte den exakt gleichen Code und es funktioniert gut für mich:

public class Main { 

    public static void main (String[] args) { 
     new A().foo("{\"bar\": \"test\"}"); 
    } 

    public static class A { 
     private final Gson gson; 

     public A() { 
      gson = new GsonBuilder().serializeNulls().create(); 
     } 

     public void foo(String json){ 
      B b = gson.fromJson(json, B.class); 
      System.out.println(b); 
     } 

     public static class B { 
      private String bar; 

      public String getBar(){ 
       return bar; 
      } 

      @Override 
      public String toString() { 
       return "B{bar='" + bar + '\'' + 
         '}'; 
      } 
     } 
    } 

} 

Innere Klassen sind funktionieren sollten so das Problem woanders ist. Dies wird ausdrucken:

B {bar = 'test'}

+0

In dem Code ich eigentlich habe, im Gegensatz zu der vereinfachten Version, die ich für die Frage gemacht habe, "gson" in diesem Fall in den Konstruktor der "Klasse A" gesetzt. Ich werde meine Frage bearbeiten, um das genauer widerzuspiegeln - ich glaube nicht, dass Vereinfachung eine Sorge wäre. – Mitch

+0

Bitte zeigen Sie uns den vollständigen Code. –

+0

Meine Antwort steht immer noch. Siehe das Update. Sie haben anderswo ein Problem, wahrscheinlich übergeben Sie die falsche Zeichenfolge an 'foo'. –

Verwandte Themen