2012-05-24 60 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

該引用是關於反序列化而不是序列化。當然,這對於反序列化是有意義的,但不適合序列化。對於序列化程序來說,它是一個內部類並不重要,它不需要引用外部類來獲取它的值。 –