使用Gson序列化匿名类

Luc*_*elt 8 java anonymous-class gson

你有什么理由不能将匿名类序列化为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();
    }
}
Run Code Online (Sandbox Code Playgroud)

刚开始吧:)

Tim*_*imK 7

用户指南中对此进行了解释:https://sites.google.com/site/gson/gson-user-guide

Gson还可以反序列化静态嵌套类.但是,Gson不能自动反序列化纯内部类,因为它们的no-args构造函数还需要对反序列化时不可用的包含Object的引用.

您可以通过使您的类非匿名和静态来修复您的代码:

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

请注意,您不能使用外部类的gson字段,您必须创建一个新的或从其他地方获取它.

  • 该引用是指反序列化而非序列化.当然,这对于反序列化是有意义的,但不适用于序列化.对于序列化程序来说,它是一个内部类并不重要,它不需要引用外部类来获取它的值. (7认同)