2011-02-28 62 views
1

我試圖反序列化使用gson json字符串。這裏是我的代碼從json轉換爲與gson類似乎不會做任何事情

static class ReturnPramaters { 
    public ReturnPramaters() 
    { 
    } 
    public Boolean LoginFailed = true; 
    public String LoginFailedReason = ""; 
    public String AppPath = ""; 
    public String WorkstiaonGuid = ""; 
    public String RDPUsername = ""; 
    public String RDPPassword = ""; 
    public int StartMode = -1; 
    public String ServerAddress = ""; 
} 
public static void main(String[] args) { 
    String json = sendGetRequest("http://example.com:80/Rdp/json/login","username=test&password=1234"); 
    Gson gson = new Gson(); 
    ReturnPramaters para = gson.fromJson(json, ReturnPramaters.class); 
    if(para.LoginFailed) 
     JOptionPane.showMessageDialog(null, para.LoginFailedReason, "Login Failed",JOptionPane.ERROR_MESSAGE); 
    else { 
     //... 
    } 
} 

這裏是我的json字符串是從get請求retured。

"{"d":{"__type":"ReturnPramaters:#ServerApp","AppPath":"C:\\Remote Desktop Manager\\Launcher\\Launcher.exe","LoginFailed":false,"LoginFailedReason":null,"RDPPassword":"XjE2QAL","RDPUsername":"test09","ServerAddress":"example.com","StartMode":1,"WorkstiaonGuid":"96175701-f72a-44e9-8ee1-6eb756293654"}}" 

但是在ReturnPramaters para = gson.fromJson(json, ReturnPramaters.class);之後仍然有所有未初始化的值。發生什麼事情會導致這種情況失敗?

回答

1

試圖傳遞給GSON之前截斷輸入字符串,因此它看起來像你目前在JSON這個

"{ 
    "AppPath":"C:\\Remote Desktop Manager\\Launcher\\Launcher.exe", 
    "LoginFailed":false, 
    "LoginFailedReason":null, 
    "RDPPassword":"XjE2QAL", 
    "RDPUsername":"test09", 
    "ServerAddress":"example.com", 
    "StartMode":1, 
    "WorkstiaonGuid":"96175701-f72a-44e9-8ee1-6eb756293654" 
}" 

對象表示下面的Java對象

public class MyClass{ 
    ReturnPramaters d; 
} 
3

看來,您映射到的JSON被封裝在另一個具有d_type字段的對象中。

因此,創建一個簡單的包裝類:

class JsonWrapper{ 
    public ReturnPramaters d; 
} 
0

你的類型的類是靜態的。這會起作用嗎?

+1

是的,它在文檔中說靜態類型是好的(實際上如果你的類是一個嵌套類(它實際上是,我只是發佈了一個簡化的例子)) – 2011-02-28 17:58:41

相關問題