Android 使用GSON和改型将JSON转换为java对象是不可能的

Android 使用GSON和改型将JSON转换为java对象是不可能的,android,gson,retrofit,Android,Gson,Retrofit,我在我的项目中使用翻新。我有个问题。我的JSON无法转换为对象 这是我的JSON: {"id":1,"facebookId":"123","uuid":"xU71niPhrqzFqmBFhk5fl4LlvWg6zk42ENG4iMjgl3eJEb9LAcqVcc9NmLHzFIgg","userInfo":{"id":1,"user":null,"email":"IP696@mail.ru","firstName":"Pavel","lastName":"Petrashov","name":nu

我在我的项目中使用翻新。我有个问题。我的JSON无法转换为对象

这是我的JSON:

{"id":1,"facebookId":"123","uuid":"xU71niPhrqzFqmBFhk5fl4LlvWg6zk42ENG4iMjgl3eJEb9LAcqVcc9NmLHzFIgg","userInfo":{"id":1,"user":null,"email":"IP696@mail.ru","firstName":"Pavel","lastName":"Petrashov","name":null,"dob":null,"gender":null,"facebookLink":"link","locale":null,"location":null,"timezone":null,"verified":null,"updatedTime":null},"balancedCustomer":null,"session":{"id":1,"session":"FTKuyeb1BXBzXRZzsAuwPYs4eRIpdi2Z","expirationDate":1424839445000,"ip":null,"user":null}}
以下是我的改装方法:

public ApiUser getApiUser(){
        if (null == apiUser) {
            Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
            RestAdapter.Builder builder = new RestAdapter.Builder()
                    .setEndpoint(BuildConfig.ROOT_URL_SKIP)
                    .setClient(new OkClient(new OkHttpClient()))
                    .setConverter(new GsonConverter(gson));
            builder.setLogLevel(RestAdapter.LogLevel.FULL);

            RestAdapter restAdapter = builder.build();
            apiUser = restAdapter.create(ApiUser.class);
        }
        return apiUser;
    }
我得到了这个错误:

Error: com.google.gson.JsonSyntaxException: 1424839445000
我的课程是这样的:

@Table(name = "Users")
public class User extends Model {

    @Expose
    @Column(name = "facebookId")
    @SerializedName("facebookId")
    private String facebookId;

    @Expose
    @Column(name = "uuid")
    @SerializedName("uuid")
    private String uuid;

    @Expose
    @Column(name = "userInfo")
    @SerializedName("userInfo")
    private UserInfo userInfo;

    @Expose
    @Column(name = "balancedCustomer")
    @SerializedName("balancedCustomer")
    private BalancedCustomer balancedCustomer;

    @Expose
    @Column(name = "session")
    @SerializedName("session")
    private Session session;

    public User() {
        super();
    }

    public UserInfo getUserInfo() {
        return userInfo;
    }

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

    public String getFacebookId() {
        return facebookId;
    }

    public void setFacebookId(String facebookId) {
        this.facebookId = facebookId;
    }

    public void setUserInfo(UserInfo userInfo) {
        this.userInfo = userInfo;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public String getUuid() {
        return uuid;
    }

    public BalancedCustomer getBalancedCustomer() {
        return balancedCustomer;
    }

    public void setBalancedCustomer(BalancedCustomer balancedCustomer) {
        this.balancedCustomer = balancedCustomer;
    }
}
编辑,整个班级

@Table(name = "Sessions")
public class Session extends Model {

    @Expose
    @Column(name = "session")
    @SerializedName("session")
    private String session;

    @Expose
    @Column(name = "expirationDate")
    @SerializedName("expirationDate")
    private Date expirationDate;

不要尝试使用Date对象获取
expirationDate
,因为在
json
中,它就像是未格式化的。您应该做的是,在
model
类中接收like string或double,然后在应用程序内部更改或解析为日期格式

    @Expose
    @Column(name = "expirationDate")
    @SerializedName("expirationDate")
    private String expirationDate;

获取
expirationDate
作为
long
而不是
Date

    @Expose
    @Column(name = "expirationDate")
    @SerializedName("expirationDate")
    private long expirationDate;

这将解决您的问题:

如果您遇到任何问题,请告诉我。

Gson Gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class,new JsonDeserializer()){
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
                public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                    return new Date(json.getAsJsonPrimitive().getAsLong());
                }
            }).create();
公共日期反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{ 返回新日期(json.getAsJsonPrimitive().getAsLong()); } }).create();
感谢链接@Deepak Bala

会话->过期日期的数据类型更改为Long或String,然后当您要将其转换为
日期对象时,只需使用此选项

Date date=new Date(expirationDate);

User
classother类中显示具有相同注释的所有变量声明。所有类型的名称相同。其中添加了
expirationDate
字段。课堂上看一下这个-