2012-05-24 62 views
4

为什么你不能将匿名类序列化为Json?使用Gson序列化匿名类

例子:

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

刚开始接触它:)

回答

6

它的用户手册的说明: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领域,你必须做出一个新的或从别的地方获取它。

+0

啊,我完全错过了那一个。非常感谢! –

+2

该引用是关于反序列化而不是序列化。当然,这对于反序列化是有意义的,但不适合序列化。对于序列化程序来说,它是一个内部类并不重要,它不需要引用外部类来获取它的值。 –