Java 使用Gson-fromJson方法不起作用

Java 使用Gson-fromJson方法不起作用,java,json,gson,Java,Json,Gson,我有一个json字符串,如下所示: "{"RequestId":255, "RequestTime":"2016-04-08T17:00:40.327", "Otp":"123456", "AppName":"This is my app name", "IsAwaitingResponse":false}" 下面还有一个类对象,我希望使用Gson库fromJson()方法创建它 public class AccessRequest{ public int Id;

我有一个json字符串,如下所示:

 "{"RequestId":255,
  "RequestTime":"2016-04-08T17:00:40.327",
  "Otp":"123456",
  "AppName":"This is my app name",
  "IsAwaitingResponse":false}"
下面还有一个类对象,我希望使用Gson库fromJson()方法创建它

public class AccessRequest{
    public int Id;
    public String RequestTime;
    public String Otp;
    public String AppName;
    public Boolean IsAwaitingResponse;
}
现在,当我调用gson.fromJson方法时,它不会出错,但我的对象没有被设置。这是我正在使用的代码

Gson gson = new Gson();
AccessRequest ar;
ar = gson.fromJson(jsonString, AccessRequest.class);
而是将我的'ar'变量设置为某个奇怪的gson对象,该对象显然是错误的,但不会抛出错误

{serializeNulls:FalseFactorys:[Factory[typeHierarchy=com.google.gson.jsoneElement,adapter=com.google.gson.internal.bind.TypeAdapters$25@e8dad0a],


据我所见,我的Json字符串中没有错误(尽管我是Json新手),所以我不确定为什么这个方法不起作用……

您可能打印了
gson
对象,而不是
ar
对象,正如@Pillar在注释中指出的那样

我已经尝试了您的示例,它按预期工作。此外,由于属性名称不匹配,
Id
字段未设置。您应该使用
@SerializedName
或更改任何名称。注释中也注意到了这一点

这是一个工作示例:

package net.sargue.gson;

import com.google.gson.Gson;
import org.intellij.lang.annotations.Language;

public class SO36553536 {
  public static void main(String[] args) {
    @Language("JSON")
    String json = "{\n" +
            "  \"RequestId\": 255,\n" +
            "  \"RequestTime\": \"2016-04-08T17:00:40.327\",\n" +
            "  \"Otp\": \"123456\",\n" +
            "  \"AppName\": \"This is my app name\",\n" +
            "  \"IsAwaitingResponse\": false\n" +
            "}";

    Gson gson = new Gson();
    AccessRequest ar;
    ar = gson.fromJson(json, AccessRequest.class);
    System.out.println("ar.getClass() = " + ar.getClass());
    System.out.println("ar = " + ar);
  }

  public class AccessRequest {
    public int Id;
    public String RequestTime;
    public String Otp;
    public String AppName;
    public Boolean IsAwaitingResponse;

    @Override
    public String toString() {
      return "AccessRequest{" + "Id=" + Id +
              ", RequestTime='" + RequestTime + '\'' +
              ", Otp='" + Otp + '\'' +
              ", AppName='" + AppName + '\'' +
              ", IsAwaitingResponse=" + IsAwaitingResponse +
              '}';
    }
  }
}
这是执行输出:

ar.getClass() = class net.sargue.gson.SO36553536$AccessRequest
ar = AccessRequest{Id=0
, RequestTime='2016-04-08T17:00:40.327'
, Otp='123456'
, AppName='This is my app name'
, IsAwaitingResponse=false}

因为只需要从Id类AccessRequest更改RequestId。
你会得到正确的输出。

你从哪里得到的输出?是什么产生的?你能发布一个MCVE吗?包含错误信息的异常是什么?请发布stacktrace。我打赌你打印的是
gson
,而不是
ar
。投票以打字错误结束,不可生成。RequestId和Id应该相同,或者你使用@SerializedName注释..此处的适当操作是投票/标记关闭为不可生产。