2017-07-13 11 views
1

私はjsonを取得し、Gsonの能力を使用してPOJOに変換しようとしています。私は別のパッケージのクラスとしてシリアライズされたクラスで作業していますが、今はシリアライズされたクラスを呼び出すクラスの内部クラスになるようにしようとしています。Gsonから内部クラスのpojoシリアル化

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

サンプルJSON:

{"bar": "test"} 

このセットアップは、内部クラス変数のnull値を返します。この場合、ちょうどバー。この例では、渡されるjsonがクラスBの変数の名前と一致することを確認しました。また、私は内部クラスを非静的で非公開にして成功を収めて実験しました。私の理解には、gsonを使ってシリアル化するためには、静的なクラスである必要があります。私が間違ってやっていることがはっきりと分かりますか?

+0

*バー*のセッターが足りないことはありますか?サンプルJSONを投稿できますか? – watery

+0

これは、内部クラスとは別のパッケージで作業していたときとまったく同じクラスなので、それではないと思いました。とにかく試してみて、運がなかった。 JSONサンプルを追加するために投稿を編集します。 – Mitch

+0

'foo'関数のパラメータとして' gson'をなぜ持っていますか?それはすぐに上書きされるということでしょうか? – Michael

答えて

0

だから私はこれが今私は二度に実行したことを、一般的な問題であると想像します。問題はJSON文字列が渡されているところでした。私はJSONをコピーしてどこかのコマンドラインに貼り付けました。その結果、見積もりは有効な引用符として登録されていませんでした。 "ではなく、でした。 2番目は二重引用符で登録されているものです。すべての助けに感謝します。

0

エラーは別の場所です。ほとんどの場合、StringまたはGsonが間違った方法で設定されています。私は正確に同じコードを貼り付け、それが私のために正常に動作します:

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 + '\'' + 
         '}'; 
      } 
     } 
    } 

} 

インナークラスが動作するようにをを想定しているので、問題は別の場所です。これは、プリントアウトします:

B {バー=「テスト」}

+0

コードでは実際に私が質問のために作った単純化されたバージョンとは対照的に、このケースでは 'class A 'のコンストラクタに' gson'が設定されています。私はこれをより正確に反映するために私の質問を編集するでしょう - 私は単純化が心配ではないと思いました。 – Mitch

+0

完全なコードを表示してください。 –

+0

私の答えはまだ立っています。アップデートを参照してください。たぶん間違った文字列を 'foo'に渡してしまうかもしれません。 –

関連する問題