2017-07-03 57 views
0

我遇到了与 json序列化的问题。所以,我使用带有动态返回的改进来访问API,因为json字段不一致。Gson与动态字段序列化

返回看起来像这样:

{ 
     "_id": "5959bace87b42b0012dd32e3", 
     "user": { 
      "_id": "58fdaca91ab5920", 
      "email": "[email protected]", 
      "fullName": "User full name" 
      "phonenumber": "+449xxxx", 
      "profilePicture": "" 
     } 
    } 

但有时,回报将是这样的(看user场):

{ 
      "_id": "5959bace87b42b0012dd32e3", 
      "user": "58fdaca91ab5920" 
} 

这是我的POJO

public class Order{ 

    @PrimaryKey 
    @SerializedName("_id") 
    @Expose 
    String id; 

    @SerializedName("user") 
    @Expose 
    User user; 
    //getter setter 
} 

任何人都知道如何解决这个问题?

感谢

+0

我张贴这是一个评论,因为我不知道这是最好的办法。我有一个类似的情况,并把''用户''''JsonElement''。 Gson能够将json字符串解析为这种类型。问题是,那么你必须手动检查用户是什么,并将其转换为适当的对象。 – Fred

+0

你的用户POJO是什么? – matrix

回答

0

我不知道它的工作或没有,只是给它一个尝试:

public class Order{ 

    @PrimaryKey 
    @SerializedName("_id") 
    @Expose 
    String id; 

    @SerializedName("user") 
    @Expose 
    User user; 

    @SerializedName("user") 
    @Expose 
    String userString; 
    //getter setter 
} 

检查null和使用哪一个是可用的。

编辑: check thisthis also

+1

我想会有一个崩溃,它可能看起来是随机的,因为反序列化的行为可能每次都不一样,而且json本身总是不一样,所以当它发生时,json用户是字符串,并且解析器尝试反序列化进入用户对象的崩溃(异常)可能发生**虽然它值得一试,我喜欢你的想法** – Yazan