8

匿名クラスをJsonにシリアル化できない理由はありますか?

例:

public class AnonymousTest
{
    private Gson gson = new Gson();

    public void goWild()
    {
        this.callBack(new Result()
        {
            public void loginResult(Result loginAttempt)
            {
                // Output null
                System.out.println(this.gson.toJson(result));   
            }
        });
    }

    public void callBack(Result result)
    {
        // Output null
        System.out.println(this.gson.toJson(result));
        result.loginResult(result);
    }

    public static void main(String[] args) 
    {
        new AnonymousTest().goWild();
    }
}

始めたばかりです:)

4

1 に答える 1

7

ユーザーガイドで説明されています:https ://sites.google.com/site/gson/gson-user-guide

Gsonは、静的にネストされたクラスを逆シリアル化することもできます。ただし、Gsonは、純粋な内部クラスを自動的に逆シリアル化することはできません。これは、引数なしのコンストラクターも、逆シリアル化時に使用できない包含オブジェクトへの参照を必要とするためです。

クラスを非匿名で静的にすることで、コードを修正できます。

static class MyResult extends Result {
    public void loginResult(Result loginAttempt) {
        System.out.println(new Gson().toJson(result));   
    }
}
...
this.callBack(new MyResult());

外部クラスのgsonフィールドは使用できないことに注意してください。新しいフィールドを作成するか、別の場所から取得する必要があります。

于 2012-05-24T23:24:03.807 に答える