【问题标题】:Converting from json to a class with gson does not appear to do anything使用 gson 从 json 转换为类似乎没有做任何事情
【发布时间】:2011-02-28 17:30:24
【问题描述】:

我正在尝试使用 gson 反序列化 json 字符串。这是我的代码

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 {
        //...
    }
}

这是我从 get 请求返回的 json 字符串。

"{"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); para 之后仍然有所有未初始化的值。导致此失败的原因是什么?

【问题讨论】:

    标签: java gson json


    【解决方案1】:

    您要映射到的 JSON 似乎包含在另一个具有 d_type 字段的对象中。

    所以创建一个简单的包装类:

    class JsonWrapper{
        public ReturnPramaters d;
    }
    

    【讨论】:

      【解决方案2】:

      在传递给 GSON 之前尝试截断传入的字符串,使其看起来像这样

      "{
          "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"
      }"
      

      您当前在 JSON 中拥有的对象代表以下 Java 对象

      public class MyClass{
        ReturnPramaters d;
      }
      

      【讨论】:

        【解决方案3】:

        您的类型类是静态的。这会奏效吗?

        【讨论】:

        • 是的,它在文档中说静态类型类很好(如果您的类是嵌套类,实际上是必需的(实际上是,我只是发布了一个简化案例))
        猜你喜欢
        • 2016-04-09
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 2023-04-06
        • 2019-11-26
        • 2019-12-08
        • 1970-01-01
        • 2020-12-21
        相关资源
        最近更新 更多