2

Gson を使用して Java オブジェクトを Json にシリアル化する関数を作成しています。

私が抱えている問題は、オブジェクト フィールドではなく、クラスのプリミティブ フィールドのみをシリアル化することです。例えば。次のような2つのクラスがあります。

class TestClass {
    public int i = 10;
    public TestClass2 tc2;
}

class TestClass2 {
    public int j = 20;
}

そして私のテストは次のとおりです。

@Test
public void shouldSerializeSimpleObjectIntoJson() {
    TestClass tc = new TestClass();

    String json = new Gson().toJson(tc);
    System.out.println(json);
}

Json の出力は次のとおりです。

{"i":10}

tc2 のフィールドは含まれません。

オブジェクトをJsonに再帰的にエンコードするようにGsonを設定するにはどうすればよいですか?

ありがとう

4

3 に答える 3

3

であるため、このフィールドは無視されnullます。ドキュメントから:

Gsonに実装されているデフォルトの動作では、nullオブジェクトフィールドは無視されます。 これにより、よりコンパクトな出力フォーマットが可能になります。ただし、JSON形式がJavaに変換されるため、クライアントはこれらのフィールドのデフォルト値を定義する必要があります。

nullを出力するようにGsonインスタンスを構成する方法は次のとおりです。

Gson gson = new GsonBuilder().serializeNulls().create();

tc.tc2以外の値に設定するnullと、出力ファイルにそのフィールドが表示されます。

于 2012-06-05T19:17:03.983 に答える
2

Java では、オブジェクト フィールドはデフォルトでは初期化されません。つまり、何かを設定しない限り、tc2 フィールドは null になります。Gson はデフォルトで null フィールドを無視するため、シリアル化されません。

他の答えが正しく言うように、コンストラクターでフィールドを初期化できます。または、次のようにして初期化することもできます。

class TestClass {
    public int i = 10;
    public TestClass2 tc2 = new TestClass2();
}
于 2012-06-05T19:46:31.113 に答える
2

特定の例では、tc2 の新しいインスタンスを作成するコンストラクターを追加します。

public TestClass()
{
   tc2 = new TestClass2();
}

そして、それが役立つかどうかを確認してください。実際のコードで TestClass2 に似たクラスに参照クラスもある場合は、それらの新しいインスタンスも作成します

于 2012-06-05T19:21:56.327 に答える